From ee5a8a05c9e0aa22e92bd083d7336a8bdc661959 Mon Sep 17 00:00:00 2001 From: Maxime Bailleul <8066485+Mexx62@users.noreply.github.com> Date: Fri, 17 Jul 2020 04:46:24 +0200 Subject: [PATCH] Add reading time for entries --- database/migration.go | 2 +- database/sql.go | 2 + database/sql/schema_version_33.sql | 1 + locale/translations.go | 711 +++++++++++++++------------- locale/translations/de_DE.json | 5 + locale/translations/en_US.json | 5 + locale/translations/es_ES.json | 5 + locale/translations/fr_FR.json | 5 + locale/translations/it_IT.json | 5 + locale/translations/ja_JP.json | 5 + locale/translations/nl_NL.json | 5 + locale/translations/pl_PL.json | 5 + locale/translations/pt_BR.json | 639 ++++++++++++------------- locale/translations/ru_RU.json | 5 + locale/translations/zh_CN.json | 5 + model/user.go | 1 + storage/user.go | 22 +- template/common.go | 9 +- template/engine.go | 3 + template/functions.go | 9 + template/html/common/item_meta.html | 7 + template/html/settings.html | 2 + template/views.go | 4 +- ui/form/settings.go | 3 + ui/settings_show.go | 1 + 25 files changed, 813 insertions(+), 653 deletions(-) create mode 100644 database/sql/schema_version_33.sql diff --git a/database/migration.go b/database/migration.go index 0aadfa4a..a0ce1133 100644 --- a/database/migration.go +++ b/database/migration.go @@ -12,7 +12,7 @@ import ( "miniflux.app/logger" ) -const schemaVersion = 32 +const schemaVersion = 33 // Migrate executes database migrations. func Migrate(db *sql.DB) { diff --git a/database/sql.go b/database/sql.go index 5efb21cd..bb9eb324 100644 --- a/database/sql.go +++ b/database/sql.go @@ -185,6 +185,7 @@ create index entries_user_feed_idx on entries (user_id, feed_id); "schema_version_31": `alter table feeds add column ignore_http_cache bool default false;`, "schema_version_32": `alter table users add column entries_per_page int default 100; `, + "schema_version_33": `alter table users add column show_reading_time boolean default 't';`, "schema_version_4": `create type entry_sorting_direction as enum('asc', 'desc'); alter table users add column entry_direction entry_sorting_direction default 'asc'; `, @@ -240,6 +241,7 @@ var SqlMapChecksums = map[string]string{ "schema_version_30": "3ec48a9b2e7a0fc32c85f31652f723565c34213f5f2d7e5e5076aad8f0b40d23", "schema_version_31": "9290ef295731b03ddfe32dcaded0be70d41b63572420ad379cf2874a9b54581c", "schema_version_32": "5b4de8dd2d7e3c6ae4150e0e3931df2ee989f2c667145bd67294e5a5f3fae456", + "schema_version_33": "bf38514efeb6c12511f41b1cc484f92722240b0a6ae874c32a958dfea3433d02", "schema_version_4": "216ea3a7d3e1704e40c797b5dc47456517c27dbb6ca98bf88812f4f63d74b5d9", "schema_version_5": "46397e2f5f2c82116786127e9f6a403e975b14d2ca7b652a48cd1ba843e6a27c", "schema_version_6": "9d05b4fb223f0e60efc716add5048b0ca9c37511cf2041721e20505d6d798ce4", diff --git a/database/sql/schema_version_33.sql b/database/sql/schema_version_33.sql new file mode 100644 index 00000000..c13d6491 --- /dev/null +++ b/database/sql/schema_version_33.sql @@ -0,0 +1 @@ +alter table users add column show_reading_time boolean default 't'; \ No newline at end of file diff --git a/locale/translations.go b/locale/translations.go index e3ce4730..7d7c7e25 100644 --- a/locale/translations.go +++ b/locale/translations.go @@ -82,6 +82,10 @@ var translations = map[string]string{ "entry.unshare.label": "Nicht teilen", "entry.shared_entry.title": "Öffnen Sie den öffentlichen Link", "entry.shared_entry.label": "Teilen", + "entry.estimated_reading_time": [ + "%d Minute gelesen", + "%d Minuten gelesen" + ], "page.shared_entries.title": "Geteilte Artikel", "page.unread.title": "Ungelesen", "page.starred.title": "Lesezeichen", @@ -264,6 +268,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Älteste Artikel zuerst", "form.prefs.select.recent_first": "Neueste Artikel zuerst", "form.prefs.label.keyboard_shortcuts": "Tastaturkürzel aktivieren", + "form.prefs.label.show_reading_time": "Geschätzte Lesezeit für Artikel anzeigen", "form.prefs.label.custom_css": "Benutzerdefiniertes CSS", "form.import.label.file": "OPML Datei", "form.import.label.url": "URL", @@ -422,6 +427,10 @@ var translations = map[string]string{ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Open the public link", "entry.shared_entry.label": "Share", + "entry.estimated_reading_time": [ + "%d minute read", + "%d minutes read" + ], "page.shared_entries.title": "Shared Entries", "page.unread.title": "Unread", "page.starred.title": "Starred", @@ -604,6 +613,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Older entries first", "form.prefs.select.recent_first": "Recent entries first", "form.prefs.label.keyboard_shortcuts": "Enable keyboard shortcuts", + "form.prefs.label.show_reading_time": "Show estimated reading time for articles", "form.prefs.label.custom_css": "Custom CSS", "form.import.label.file": "OPML file", "form.import.label.url": "URL", @@ -742,6 +752,10 @@ var translations = map[string]string{ "entry.unshare.label": "No compartir", "entry.shared_entry.title": "Abrir el enlace público", "entry.shared_entry.label": "Compartir", + "entry.estimated_reading_time": [ + "%d minuto de lectura", + "%d minutos de lectura" + ], "page.shared_entries.title": "Entradas compartidas", "page.unread.title": "No leídos", "page.starred.title": "Marcadores", @@ -924,6 +938,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Entradas más viejas primero", "form.prefs.select.recent_first": "Entradas recientes primero", "form.prefs.label.keyboard_shortcuts": "Habilitar atajos de teclado", + "form.prefs.label.show_reading_time": "Mostrar el tiempo estimado de lectura de los artículos", "form.prefs.label.custom_css": "CSS personalizado", "form.import.label.file": "Archivo OPML", "form.import.label.url": "URL", @@ -1062,6 +1077,10 @@ var translations = map[string]string{ "entry.unshare.label": "Enlever le partage", "entry.shared_entry.title": "Ouvrir le lien public", "entry.shared_entry.label": "Partage", + "entry.estimated_reading_time": [ + "%d minute de lecture", + "%d minutes de lecture" + ], "page.shared_entries.title": "Articles partagés", "page.unread.title": "Non lus", "page.starred.title": "Favoris", @@ -1244,6 +1263,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Ancien éléments en premier", "form.prefs.select.recent_first": "Éléments récents en premier", "form.prefs.label.keyboard_shortcuts": "Activer les raccourcis clavier", + "form.prefs.label.show_reading_time": "Afficher le temps de lecture estimé des articles", "form.prefs.label.custom_css": "CSS personnalisé", "form.import.label.file": "Fichier OPML", "form.import.label.url": "URL", @@ -1402,6 +1422,10 @@ var translations = map[string]string{ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Apri il link pubblico", "entry.shared_entry.label": "Condivisione", + "entry.estimated_reading_time": [ + "%d minuto di lettura", + "%d minuti di lettura" + ], "page.shared_entries.title": "Voci condivise", "page.unread.title": "Da leggere", "page.starred.title": "Preferiti", @@ -1584,6 +1608,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Prima i più vecchi", "form.prefs.select.recent_first": "Prima i più recenti", "form.prefs.label.keyboard_shortcuts": "Abilita le scorciatoie da tastiera", + "form.prefs.label.show_reading_time": "Mostra il tempo di lettura stimato per gli articoli", "form.prefs.label.custom_css": "CSS personalizzati", "form.import.label.file": "File OPML", "form.import.label.url": "URL", @@ -1722,6 +1747,10 @@ var translations = map[string]string{ "entry.unshare.label": "共有解除", "entry.shared_entry.title": "公開リンクを開く", "entry.shared_entry.label": "共有する", + "entry.estimated_reading_time": [ + "%d分で読む", + "%d分で読む" + ], "page.shared_entries.title": "共有エントリ", "page.unread.title": "未読", "page.starred.title": "星付き", @@ -1904,6 +1933,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "古い記事を最初に", "form.prefs.select.recent_first": "新しい記事を最初に", "form.prefs.label.keyboard_shortcuts": "キーボード・ショートカットを有効にする", + "form.prefs.label.show_reading_time": "記事の推定読書時間を表示する", "form.prefs.label.custom_css": "カスタムCSS", "form.import.label.file": "OPML ファイル", "form.import.label.url": "URL", @@ -2042,6 +2072,10 @@ var translations = map[string]string{ "entry.unshare.label": "Delen ongedaan maken", "entry.shared_entry.title": "Open de openbare link", "entry.shared_entry.label": "Delen", + "entry.estimated_reading_time": [ + "%d minuut gelezen", + "%d minuten gelezen" + ], "page.shared_entries.title": "Gedeelde vermeldingen", "page.unread.title": "Ongelezen", "page.starred.title": "Favorieten", @@ -2224,6 +2258,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Oudere items eerst", "form.prefs.select.recent_first": "Recente items eerst", "form.prefs.label.keyboard_shortcuts": "Schakel sneltoetsen in", + "form.prefs.label.show_reading_time": "Toon geschatte leestijd voor artikelen", "form.prefs.label.custom_css": "Aangepaste CSS", "form.import.label.file": "OPML-bestand", "form.import.label.url": "URL", @@ -2380,6 +2415,10 @@ var translations = map[string]string{ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Otwórz publiczny link", "entry.shared_entry.label": "Udostępnianie", + "entry.estimated_reading_time": [ + "%d minuta czytania", + "%d minut czytania" + ], "page.shared_entries.title": "Udostępnione wpisy", "page.unread.title": "Nieprzeczytane", "page.starred.title": "Oznaczone gwiazdką", @@ -2563,6 +2602,7 @@ var translations = map[string]string{ "form.prefs.label.entries_per_page": "Wpisy na stronie", "form.prefs.select.older_first": "Najstarsze wpisy jako pierwsze", "form.prefs.label.keyboard_shortcuts": "Włącz skróty klawiaturowe", + "form.prefs.label.show_reading_time": "Pokaż szacowany czas czytania artykułów", "form.prefs.select.recent_first": "Najnowsze wpisy jako pierwsze", "form.prefs.label.custom_css": "Niestandardowy CSS", "form.import.label.file": "Plik OPML", @@ -2648,323 +2688,328 @@ var translations = map[string]string{ } `, "pt_BR": `{ - "confirm.question": "Tem certeza?", - "confirm.yes": "Sim", - "confirm.no": "Não", - "confirm.loading": "Carregando...", - "action.subscribe": "Inscrever", - "action.save": "Salvar", - "action.or": "Ou", - "action.cancel": "Cancelar", - "action.remove": "Remover", - "action.remove_feed": "Remover fonte", - "action.update": "Atualizar", - "action.edit": "Editar", - "action.download": "Baixar", - "action.import": "Importar", - "action.login": "Iniciar sessão", - "action.home_screen": "Voltar para a tela inicial", - "tooltip.keyboard_shortcuts": "Atalho do teclado: %s", - "tooltip.logged_user": "Autenticado como %s", - "menu.unread": "Não lido", - "menu.starred": "Favoritos", - "menu.history": "Histórico", - "menu.feeds": "Fontes", - "menu.categories": "Categorias", - "menu.settings": "Configurações", - "menu.logout": "Encerrar sessão", - "menu.preferences": "Preferências", - "menu.integrations": "Integrações", - "menu.sessions": "Sessões", - "menu.users": "Usuários", - "menu.about": "Sobre", - "menu.export": "Exportar", - "menu.import": "Importar", - "menu.create_category": "Criar uma categoria", - "menu.mark_page_as_read": "Marcar essa página como lída", - "menu.mark_all_as_read": "Marcar todos como lido", - "menu.show_all_entries": "Mostrar todas os itens", - "menu.show_only_unread_entries": "Mostrar apenas itens não lidos", - "menu.refresh_feed": "Atualizar", - "menu.refresh_all_feeds": "Atualizar todas as fontes", - "menu.edit_feed": "Editar", - "menu.edit_category": "Editar", - "menu.add_feed": "Adicionar inscrição", - "menu.add_user": "Adicionar usuário", - "menu.flush_history": "Limpar histórico", - "menu.feed_entries": "Itens", - "menu.api_keys": "Chaves de API", - "menu.create_api_key": "Criar uma nova chave de API", - "menu.shared_entries": "Itens compartilhados", - "search.label": "Buscar", - "search.placeholder": "Buscar por...", - "pagination.next": "Próximo", - "pagination.previous": "Anterior", - "entry.status.unread": "Não lido", - "entry.status.read": "Lido", - "entry.status.toast.unread": "Marcado como não lido", - "entry.status.toast.read": "Marcado como lido", - "entry.status.title": "Modificar estado deste item", - "entry.bookmark.toggle.on": "Marcar", - "entry.bookmark.toggle.off": "Desmarcar", - "entry.bookmark.toast.on": "Favoritado", - "entry.bookmark.toast.off": "Desfavoritado", - "entry.state.saving": "Salvando...", - "entry.state.loading": "Carregando...", - "entry.save.label": "Salvar", - "entry.save.title": "Salvar esse item", - "entry.save.completed": "Feito!", - "entry.save.toast.completed": "Item guardado", - "entry.scraper.label": "Conteúdo completo", - "entry.scraper.title": "Obter conteúdo completo", - "entry.scraper.completed": "Feito!", - "entry.original.label": "Original", - "entry.comments.label": "Comentários", - "entry.comments.title": "Ver comentários", - "entry.share.label": "Compartilhar", - "entry.share.title": "Compartilhar esse item", - "entry.unshare.label": "Descompartilhar", - "entry.shared_entry.title": "Abrir link público", - "entry.shared_entry.label": "Compartilhar", - "page.shared_entries.title": "Itens compartilhados", - "page.unread.title": "Não lídos", - "page.starred.title": "Favoritos", - "page.categories.title": "Categorias", - "page.categories.no_feed": "Sem fonte.", - "page.categories.entries": "Itens", - "page.categories.feeds": "Inscrições", - "page.categories.feed_count": [ - "Existe %d fonte.", - "Existem %d fontes." - ], - "page.new_category.title": "Nova categoria", - "page.new_user.title": "Novo usuário", - "page.edit_category.title": "Editar categoria: %s", - "page.edit_user.title": "Editar usuário: %s", - "page.feeds.title": "Fontes", - "page.feeds.last_check": "Última verificação:", - "page.feeds.unread_counter": "Numero de itens não lidos", - "page.feeds.read_counter": "Número de itens lidos", - "page.feeds.error_count": [ - "%d erro", - "%d erros" - ], - "page.history.title": "Histórico", - "page.import.title": "Importar", - "page.search.title": "Resultados da busca", - "page.about.title": "Sobre", - "page.about.credits": "Créditos", - "page.about.version": "Versão:", - "page.about.build_date": "Compilado em:", - "page.about.author": "Autor:", - "page.about.license": "Licença:", - "page.add_feed.title": "Nova inscrição", - "page.add_feed.no_category": "Não existe uma categoria. Deve existir pelo menos uma categoria.", - "page.add_feed.label.url": "URL", - "page.add_feed.submit": "Buscar uma fonte", - "page.add_feed.legend.advanced_options": "Opções avançadas", - "page.add_feed.choose_feed": "Escolher uma fonte", - "page.edit_feed.title": "Editar fonte: %s", - "page.edit_feed.last_check": "Última verificação:", - "page.edit_feed.last_modified_header": "Cabeçalho 'LastModified':", - "page.edit_feed.etag_header": "Cabeçalho 'ETag':", - "page.edit_feed.no_header": "Sem cabeçalhos", - "page.edit_feed.last_parsing_error": "Último erro durante processamento", - "page.entry.attachments": "Anexos", - "page.keyboard_shortcuts.title": "Atalhos de teclado", - "page.keyboard_shortcuts.subtitle.sections": "Navegação de seções", - "page.keyboard_shortcuts.subtitle.items": "Navegação de itens", - "page.keyboard_shortcuts.subtitle.pages": "Navegação de páginas", - "page.keyboard_shortcuts.subtitle.actions": "Ações", - "page.keyboard_shortcuts.go_to_unread": "Ir aos não lidos", - "page.keyboard_shortcuts.go_to_starred": "Ir aos favoritos", - "page.keyboard_shortcuts.go_to_history": "Ir ao histórico", - "page.keyboard_shortcuts.go_to_feeds": "Ir as inscrições", - "page.keyboard_shortcuts.go_to_categories": "Ir as categorias", - "page.keyboard_shortcuts.go_to_settings": "Ir as configurações", - "page.keyboard_shortcuts.show_keyboard_shortcuts": "Mostrar atalhos de teclado", - "page.keyboard_shortcuts.go_to_previous_item": "Ir ao item anterior", - "page.keyboard_shortcuts.go_to_next_item": "Ir ao tem seguinte", - "page.keyboard_shortcuts.go_to_feed": "Ir a fonte", - "page.keyboard_shortcuts.go_to_previous_page": "Ir a página anterior", - "page.keyboard_shortcuts.go_to_next_page": "Ir a página seguinte", - "page.keyboard_shortcuts.open_item": "Abrir o item selecionado", - "page.keyboard_shortcuts.open_original": "Abrir o conteúdo original", - "page.keyboard_shortcuts.open_original_same_window": "Abrir o conteúdo original na janela atual", - "page.keyboard_shortcuts.open_comments": "Abrir os comentários", - "page.keyboard_shortcuts.open_comments_same_window": "Abrir os comentários na janela atual", - "page.keyboard_shortcuts.toggle_read_status": "Inverter estado de leitura do item", - "page.keyboard_shortcuts.refresh_all_feeds": "Atualizar todas as fontes", - "page.keyboard_shortcuts.mark_page_as_read": "Marcar página atual como lida", - "page.keyboard_shortcuts.download_content": "Buscar o conteúdo original", - "page.keyboard_shortcuts.toggle_bookmark_status": "Marcar ou desmarcar como favorito", - "page.keyboard_shortcuts.save_article": "Salvar item", - "page.keyboard_shortcuts.remove_feed": "Remover essa fonte", - "page.keyboard_shortcuts.go_to_search": "Ir para o campo de busca", - "page.keyboard_shortcuts.close_modal": "Fechar janela", - "page.users.title": "Usuários", - "page.users.username": "Nome de usuário", - "page.users.never_logged": "Nunca", - "page.users.admin.yes": "Sim", - "page.users.admin.no": "Não", - "page.users.actions": "Ações", - "page.users.last_login": "Último acesso", - "page.users.is_admin": "Administrador", - "page.settings.title": "Ajustes", - "page.settings.link_google_account": "Vincular minha conta do Google", - "page.settings.unlink_google_account": "Desvincular minha conta do Google", - "page.settings.link_oidc_account": "Vincular minha conta do OpenID Connect", - "page.settings.unlink_oidc_account": "Desvincular minha conta do OpenID Connect", - "page.login.title": "Iniciar Sessão", - "page.login.google_signin": "Iniciar Sessão com sua conta do Google", - "page.login.oidc_signin": "Iniciar Sessão com sua conta do OpenID Connect", - "page.integrations.title": "Integrações", - "page.integration.miniflux_api": "API do Miniflux", - "page.integration.miniflux_api_endpoint": "Endpoint da API", - "page.integration.miniflux_api_username": "Nome de usuário", - "page.integration.miniflux_api_password": "Senha", - "page.integration.miniflux_api_password_value": "Senha da sua Conta", - "page.integration.bookmarklet": "Bookmarklet", - "page.integration.bookmarklet.name": "Adicionar ao Miniflux", - "page.integration.bookmarklet.instructions": "Arrasta e solta esse link para os favoritos do teu navegador.", - "page.integration.bookmarklet.help": "Esse link especial permite você se inscrever a um site diretamente usando favorito do navegador.", - "page.sessions.title": "Sessões", - "page.sessions.table.date": "Data", - "page.sessions.table.ip": "Endereço IP", - "page.sessions.table.user_agent": "Agente de usuário", - "page.sessions.table.actions": "Ações", - "page.sessions.table.current_session": "Sessão Atual", - "page.api_keys.title": "Chaves de API", - "page.api_keys.table.description": "Descrição", - "page.api_keys.table.token": "Token", - "page.api_keys.table.last_used_at": "Ultima utilização", - "page.api_keys.table.created_at": "Data de criação", - "page.api_keys.table.actions": "Ações", - "page.api_keys.never_used": "Nunca usado", - "page.new_api_key.title": "Nova chave de API", - "alert.no_shared_entry": "Não há itens compartilhados.", - "alert.no_bookmark": "Não há favorito neste momento.", - "alert.no_category": "Não há categoria.", - "alert.no_category_entry": "Não há itens nesta categoria.", - "alert.no_feed_entry": "Não há itens nessa fonte.", - "alert.no_feed": "Não há inscrições.", - "alert.no_feed_in_category": "Não há inscrições nessa categoria.", - "alert.no_history": "Não há histórico nesse momento.", - "alert.feed_error": "Ocorreu um problema com esta fonte.", - "alert.no_search_result": "Não há resultados para essa busca.", - "alert.no_unread_entry": "Não há itens não lidos.", - "alert.no_user": "Você é o único usuário.", - "alert.account_unlinked": "Sua conta externa está desvinculada!", - "alert.account_linked": "Sua conta externa está vinculada!", - "alert.pocket_linked": "Sua conta do Pocket está vinculada!", - "alert.prefs_saved": "Suas preferências foram salvas!", - "error.unlink_account_without_password": "Você deve definir uma senha, senão não será possível efetuar a sessão novamente.", - "error.duplicate_linked_account": "Alguém já está vinculado a esse serviço!", - "error.duplicate_fever_username": "Alguém já está utilizando esse nome de usuário do Fever!", - "error.pocket_request_token": "Não foi possível obter um pedido de token no Pocket!", - "error.pocket_access_token": "Não foi possível obter um token de acesso no Pocket!", - "error.category_already_exists": "Esta categoria já existe.", - "error.unable_to_create_category": "Não foi possível criar essa categoria.", - "error.unable_to_update_category": "Não foi possível atualizar essa categoria.", - "error.user_already_exists": "Esse usuário já existe.", - "error.unable_to_create_user": "Não foi possível criar esse usuário.", - "error.unable_to_update_user": "Não foi possível atualizar esse usuário.", - "error.unable_to_update_feed": "Não foi possível atualizar essa fonte.", - "error.subscription_not_found": "Não foi possível encontrar uma inscrição.", - "error.empty_file": "Esse arquivo está vazio.", - "error.bad_credentials": "Usuário ou senha são inválidos.", - "error.fields_mandatory": "Todos os campos são obrigatórios.", - "error.title_required": "O título é obrigatório.", - "error.different_passwords": "As senhas não são iguais.", - "error.password_min_length": "A senha deve ter no mínimo 6 caracteres.", - "error.settings_mandatory_fields": "Os campos de nome de usuário, tema, idioma e fuso horário são obrigatórios.", - "error.entries_per_page_invalid": "O número de itens por página é inválido.", - "error.feed_mandatory_fields": "O campo de URL e categoria são obrigatórios.", - "error.user_mandatory_fields": "O nome de usuário é obrigatório.", - "error.api_key_already_exists": "Essa chave de API já existe.", - "error.unable_to_create_api_key": "Não foi possível criar uma chave de API.", - "form.feed.label.title": "Título", - "form.feed.label.site_url": "URL do site", - "form.feed.label.feed_url": "URL da fonte", - "form.feed.label.category": "Categoria", - "form.feed.label.crawler": "Obter conteúdo original", - "form.feed.label.feed_username": "Nome de usuário da fonte", - "form.feed.label.feed_password": "Senha da fonte", - "form.feed.label.user_agent": "Sobrescrever o agente de usuário (user-agent) padrão", - "form.feed.label.scraper_rules": "Regras do scraper", - "form.feed.label.rewrite_rules": "Regras para o Rewrite", - "form.feed.label.ignore_http_cache": "Ignorar cache HTTP", - "form.feed.label.disabled": "Não atualizar esta fonte", - "form.category.label.title": "Título", - "form.user.label.username": "Nome de usuário", - "form.user.label.password": "Senha", - "form.user.label.confirmation": "Confirmação de senha", - "form.user.label.admin": "Administrador", - "form.prefs.label.language": "Idioma", - "form.prefs.label.timezone": "Fuso horário", - "form.prefs.label.theme": "Tema", - "form.prefs.label.entry_sorting": "Ordenação dos itens", - "form.prefs.label.entries_per_page": "Itens por página", - "form.prefs.select.older_first": "Itens mais velhos primeiro", - "form.prefs.select.recent_first": "Itens mais recentes", - "form.prefs.label.keyboard_shortcuts": "Habilitar atalhos do teclado", - "form.prefs.label.custom_css": "CSS customizado", - "form.import.label.file": "Arquivo OPML", - "form.import.label.url": "URL", - "form.integration.fever_activate": "Ativar API do Fever", - "form.integration.fever_username": "Nome de usuário do Fever", - "form.integration.fever_password": "Senha do Fever", - "form.integration.fever_endpoint": "Endpoint da API do Fever:", - "form.integration.pinboard_activate": "Salvar itens no Pinboard", - "form.integration.pinboard_token": "Token de API do Pinboard", - "form.integration.pinboard_tags": "Etiquetas (tags) do Pinboard", - "form.integration.pinboard_bookmark": "Salvar marcador como não lído", - "form.integration.instapaper_activate": "Salvar itens no Instapaper", - "form.integration.instapaper_username": "Nome do usuário do Instapaper", - "form.integration.instapaper_password": "Senha do Instapaper", - "form.integration.pocket_activate": "Salvar itens no Pocket", - "form.integration.pocket_consumer_key": "Chave de consumo (Consumer Key) do Pocket", - "form.integration.pocket_access_token": "Token de acesso do Pocket", - "form.integration.pocket_connect_link": "Conectar a conta do Pocket", - "form.integration.wallabag_activate": "Salvar itens no Wallabag", - "form.integration.wallabag_endpoint": "Endpoint da API do Wallabag", - "form.integration.wallabag_client_id": "ID de cliente (Client ID) do Wallabag", - "form.integration.wallabag_client_secret": "Segredo do cliente (Client Secret) do Wallabag", - "form.integration.wallabag_username": "Nome de usuário do Wallabag", - "form.integration.wallabag_password": "Senha do Wallabag", - "form.integration.nunux_keeper_activate": "Salvar itens no Nunux Keeper", - "form.integration.nunux_keeper_endpoint": "Endpoint de API do Nunux Keeper", - "form.integration.nunux_keeper_api_key": "Chave de API do Nunux Keeper", - "form.api_key.label.description": "Etiqueta da chave de API", - "form.submit.loading": "Carregando...", - "form.submit.saving": "Salvando...", - "time_elapsed.not_yet": "ainda não", - "time_elapsed.yesterday": "ontem", - "time_elapsed.now": "agora mesmo", - "time_elapsed.minutes": [ - "há %d minuto", - "há %d minutos" - ], - "time_elapsed.hours": [ - "há %d hora", - "há %d horas" - ], - "time_elapsed.days": [ - "há %d dia", - "há %d dias" - ], - "time_elapsed.weeks": [ - "há %d semana", - "há %d semanas" - ], - "time_elapsed.months": [ - "há %d mês", - "há %d meses" - ], - "time_elapsed.years": [ - "há %d ano", - "há %d anos" - ] + "confirm.question": "Tem certeza?", + "confirm.yes": "Sim", + "confirm.no": "Não", + "confirm.loading": "Carregando...", + "action.subscribe": "Inscrever", + "action.save": "Salvar", + "action.or": "Ou", + "action.cancel": "Cancelar", + "action.remove": "Remover", + "action.remove_feed": "Remover fonte", + "action.update": "Atualizar", + "action.edit": "Editar", + "action.download": "Baixar", + "action.import": "Importar", + "action.login": "Iniciar sessão", + "action.home_screen": "Voltar para a tela inicial", + "tooltip.keyboard_shortcuts": "Atalho do teclado: %s", + "tooltip.logged_user": "Autenticado como %s", + "menu.unread": "Não lido", + "menu.starred": "Favoritos", + "menu.history": "Histórico", + "menu.feeds": "Fontes", + "menu.categories": "Categorias", + "menu.settings": "Configurações", + "menu.logout": "Encerrar sessão", + "menu.preferences": "Preferências", + "menu.integrations": "Integrações", + "menu.sessions": "Sessões", + "menu.users": "Usuários", + "menu.about": "Sobre", + "menu.export": "Exportar", + "menu.import": "Importar", + "menu.create_category": "Criar uma categoria", + "menu.mark_page_as_read": "Marcar essa página como lída", + "menu.mark_all_as_read": "Marcar todos como lido", + "menu.show_all_entries": "Mostrar todas os itens", + "menu.show_only_unread_entries": "Mostrar apenas itens não lidos", + "menu.refresh_feed": "Atualizar", + "menu.refresh_all_feeds": "Atualizar todas as fontes", + "menu.edit_feed": "Editar", + "menu.edit_category": "Editar", + "menu.add_feed": "Adicionar inscrição", + "menu.add_user": "Adicionar usuário", + "menu.flush_history": "Limpar histórico", + "menu.feed_entries": "Itens", + "menu.api_keys": "Chaves de API", + "menu.create_api_key": "Criar uma nova chave de API", + "menu.shared_entries": "Itens compartilhados", + "search.label": "Buscar", + "search.placeholder": "Buscar por...", + "pagination.next": "Próximo", + "pagination.previous": "Anterior", + "entry.status.unread": "Não lido", + "entry.status.read": "Lido", + "entry.status.toast.unread": "Marcado como não lido", + "entry.status.toast.read": "Marcado como lido", + "entry.status.title": "Modificar estado deste item", + "entry.bookmark.toggle.on": "Marcar", + "entry.bookmark.toggle.off": "Desmarcar", + "entry.bookmark.toast.on": "Favoritado", + "entry.bookmark.toast.off": "Desfavoritado", + "entry.state.saving": "Salvando...", + "entry.state.loading": "Carregando...", + "entry.save.label": "Salvar", + "entry.save.title": "Salvar esse item", + "entry.save.completed": "Feito!", + "entry.save.toast.completed": "Item guardado", + "entry.scraper.label": "Conteúdo completo", + "entry.scraper.title": "Obter conteúdo completo", + "entry.scraper.completed": "Feito!", + "entry.original.label": "Original", + "entry.comments.label": "Comentários", + "entry.comments.title": "Ver comentários", + "entry.share.label": "Compartilhar", + "entry.share.title": "Compartilhar esse item", + "entry.unshare.label": "Descompartilhar", + "entry.shared_entry.title": "Abrir link público", + "entry.shared_entry.label": "Compartilhar", + "entry.estimated_reading_time": [ + "%d minuto lido", + "%d minutos lidos" + ], + "page.shared_entries.title": "Itens compartilhados", + "page.unread.title": "Não lídos", + "page.starred.title": "Favoritos", + "page.categories.title": "Categorias", + "page.categories.no_feed": "Sem fonte.", + "page.categories.entries": "Itens", + "page.categories.feeds": "Inscrições", + "page.categories.feed_count": [ + "Existe %d fonte.", + "Existem %d fontes." + ], + "page.new_category.title": "Nova categoria", + "page.new_user.title": "Novo usuário", + "page.edit_category.title": "Editar categoria: %s", + "page.edit_user.title": "Editar usuário: %s", + "page.feeds.title": "Fontes", + "page.feeds.last_check": "Última verificação:", + "page.feeds.unread_counter": "Numero de itens não lidos", + "page.feeds.read_counter": "Número de itens lidos", + "page.feeds.error_count": [ + "%d erro", + "%d erros" + ], + "page.history.title": "Histórico", + "page.import.title": "Importar", + "page.search.title": "Resultados da busca", + "page.about.title": "Sobre", + "page.about.credits": "Créditos", + "page.about.version": "Versão:", + "page.about.build_date": "Compilado em:", + "page.about.author": "Autor:", + "page.about.license": "Licença:", + "page.add_feed.title": "Nova inscrição", + "page.add_feed.no_category": "Não existe uma categoria. Deve existir pelo menos uma categoria.", + "page.add_feed.label.url": "URL", + "page.add_feed.submit": "Buscar uma fonte", + "page.add_feed.legend.advanced_options": "Opções avançadas", + "page.add_feed.choose_feed": "Escolher uma fonte", + "page.edit_feed.title": "Editar fonte: %s", + "page.edit_feed.last_check": "Última verificação:", + "page.edit_feed.last_modified_header": "Cabeçalho 'LastModified':", + "page.edit_feed.etag_header": "Cabeçalho 'ETag':", + "page.edit_feed.no_header": "Sem cabeçalhos", + "page.edit_feed.last_parsing_error": "Último erro durante processamento", + "page.entry.attachments": "Anexos", + "page.keyboard_shortcuts.title": "Atalhos de teclado", + "page.keyboard_shortcuts.subtitle.sections": "Navegação de seções", + "page.keyboard_shortcuts.subtitle.items": "Navegação de itens", + "page.keyboard_shortcuts.subtitle.pages": "Navegação de páginas", + "page.keyboard_shortcuts.subtitle.actions": "Ações", + "page.keyboard_shortcuts.go_to_unread": "Ir aos não lidos", + "page.keyboard_shortcuts.go_to_starred": "Ir aos favoritos", + "page.keyboard_shortcuts.go_to_history": "Ir ao histórico", + "page.keyboard_shortcuts.go_to_feeds": "Ir as inscrições", + "page.keyboard_shortcuts.go_to_categories": "Ir as categorias", + "page.keyboard_shortcuts.go_to_settings": "Ir as configurações", + "page.keyboard_shortcuts.show_keyboard_shortcuts": "Mostrar atalhos de teclado", + "page.keyboard_shortcuts.go_to_previous_item": "Ir ao item anterior", + "page.keyboard_shortcuts.go_to_next_item": "Ir ao tem seguinte", + "page.keyboard_shortcuts.go_to_feed": "Ir a fonte", + "page.keyboard_shortcuts.go_to_previous_page": "Ir a página anterior", + "page.keyboard_shortcuts.go_to_next_page": "Ir a página seguinte", + "page.keyboard_shortcuts.open_item": "Abrir o item selecionado", + "page.keyboard_shortcuts.open_original": "Abrir o conteúdo original", + "page.keyboard_shortcuts.open_original_same_window": "Abrir o conteúdo original na janela atual", + "page.keyboard_shortcuts.open_comments": "Abrir os comentários", + "page.keyboard_shortcuts.open_comments_same_window": "Abrir os comentários na janela atual", + "page.keyboard_shortcuts.toggle_read_status": "Inverter estado de leitura do item", + "page.keyboard_shortcuts.refresh_all_feeds": "Atualizar todas as fontes", + "page.keyboard_shortcuts.mark_page_as_read": "Marcar página atual como lida", + "page.keyboard_shortcuts.download_content": "Buscar o conteúdo original", + "page.keyboard_shortcuts.toggle_bookmark_status": "Marcar ou desmarcar como favorito", + "page.keyboard_shortcuts.save_article": "Salvar item", + "page.keyboard_shortcuts.remove_feed": "Remover essa fonte", + "page.keyboard_shortcuts.go_to_search": "Ir para o campo de busca", + "page.keyboard_shortcuts.close_modal": "Fechar janela", + "page.users.title": "Usuários", + "page.users.username": "Nome de usuário", + "page.users.never_logged": "Nunca", + "page.users.admin.yes": "Sim", + "page.users.admin.no": "Não", + "page.users.actions": "Ações", + "page.users.last_login": "Último acesso", + "page.users.is_admin": "Administrador", + "page.settings.title": "Ajustes", + "page.settings.link_google_account": "Vincular minha conta do Google", + "page.settings.unlink_google_account": "Desvincular minha conta do Google", + "page.settings.link_oidc_account": "Vincular minha conta do OpenID Connect", + "page.settings.unlink_oidc_account": "Desvincular minha conta do OpenID Connect", + "page.login.title": "Iniciar Sessão", + "page.login.google_signin": "Iniciar Sessão com sua conta do Google", + "page.login.oidc_signin": "Iniciar Sessão com sua conta do OpenID Connect", + "page.integrations.title": "Integrações", + "page.integration.miniflux_api": "API do Miniflux", + "page.integration.miniflux_api_endpoint": "Endpoint da API", + "page.integration.miniflux_api_username": "Nome de usuário", + "page.integration.miniflux_api_password": "Senha", + "page.integration.miniflux_api_password_value": "Senha da sua Conta", + "page.integration.bookmarklet": "Bookmarklet", + "page.integration.bookmarklet.name": "Adicionar ao Miniflux", + "page.integration.bookmarklet.instructions": "Arrasta e solta esse link para os favoritos do teu navegador.", + "page.integration.bookmarklet.help": "Esse link especial permite você se inscrever a um site diretamente usando favorito do navegador.", + "page.sessions.title": "Sessões", + "page.sessions.table.date": "Data", + "page.sessions.table.ip": "Endereço IP", + "page.sessions.table.user_agent": "Agente de usuário", + "page.sessions.table.actions": "Ações", + "page.sessions.table.current_session": "Sessão Atual", + "page.api_keys.title": "Chaves de API", + "page.api_keys.table.description": "Descrição", + "page.api_keys.table.token": "Token", + "page.api_keys.table.last_used_at": "Ultima utilização", + "page.api_keys.table.created_at": "Data de criação", + "page.api_keys.table.actions": "Ações", + "page.api_keys.never_used": "Nunca usado", + "page.new_api_key.title": "Nova chave de API", + "alert.no_shared_entry": "Não há itens compartilhados.", + "alert.no_bookmark": "Não há favorito neste momento.", + "alert.no_category": "Não há categoria.", + "alert.no_category_entry": "Não há itens nesta categoria.", + "alert.no_feed_entry": "Não há itens nessa fonte.", + "alert.no_feed": "Não há inscrições.", + "alert.no_feed_in_category": "Não há inscrições nessa categoria.", + "alert.no_history": "Não há histórico nesse momento.", + "alert.feed_error": "Ocorreu um problema com esta fonte.", + "alert.no_search_result": "Não há resultados para essa busca.", + "alert.no_unread_entry": "Não há itens não lidos.", + "alert.no_user": "Você é o único usuário.", + "alert.account_unlinked": "Sua conta externa está desvinculada!", + "alert.account_linked": "Sua conta externa está vinculada!", + "alert.pocket_linked": "Sua conta do Pocket está vinculada!", + "alert.prefs_saved": "Suas preferências foram salvas!", + "error.unlink_account_without_password": "Você deve definir uma senha, senão não será possível efetuar a sessão novamente.", + "error.duplicate_linked_account": "Alguém já está vinculado a esse serviço!", + "error.duplicate_fever_username": "Alguém já está utilizando esse nome de usuário do Fever!", + "error.pocket_request_token": "Não foi possível obter um pedido de token no Pocket!", + "error.pocket_access_token": "Não foi possível obter um token de acesso no Pocket!", + "error.category_already_exists": "Esta categoria já existe.", + "error.unable_to_create_category": "Não foi possível criar essa categoria.", + "error.unable_to_update_category": "Não foi possível atualizar essa categoria.", + "error.user_already_exists": "Esse usuário já existe.", + "error.unable_to_create_user": "Não foi possível criar esse usuário.", + "error.unable_to_update_user": "Não foi possível atualizar esse usuário.", + "error.unable_to_update_feed": "Não foi possível atualizar essa fonte.", + "error.subscription_not_found": "Não foi possível encontrar uma inscrição.", + "error.empty_file": "Esse arquivo está vazio.", + "error.bad_credentials": "Usuário ou senha são inválidos.", + "error.fields_mandatory": "Todos os campos são obrigatórios.", + "error.title_required": "O título é obrigatório.", + "error.different_passwords": "As senhas não são iguais.", + "error.password_min_length": "A senha deve ter no mínimo 6 caracteres.", + "error.settings_mandatory_fields": "Os campos de nome de usuário, tema, idioma e fuso horário são obrigatórios.", + "error.entries_per_page_invalid": "O número de itens por página é inválido.", + "error.feed_mandatory_fields": "O campo de URL e categoria são obrigatórios.", + "error.user_mandatory_fields": "O nome de usuário é obrigatório.", + "error.api_key_already_exists": "Essa chave de API já existe.", + "error.unable_to_create_api_key": "Não foi possível criar uma chave de API.", + "form.feed.label.title": "Título", + "form.feed.label.site_url": "URL do site", + "form.feed.label.feed_url": "URL da fonte", + "form.feed.label.category": "Categoria", + "form.feed.label.crawler": "Obter conteúdo original", + "form.feed.label.feed_username": "Nome de usuário da fonte", + "form.feed.label.feed_password": "Senha da fonte", + "form.feed.label.user_agent": "Sobrescrever o agente de usuário (user-agent) padrão", + "form.feed.label.scraper_rules": "Regras do scraper", + "form.feed.label.rewrite_rules": "Regras para o Rewrite", + "form.feed.label.ignore_http_cache": "Ignorar cache HTTP", + "form.feed.label.disabled": "Não atualizar esta fonte", + "form.category.label.title": "Título", + "form.user.label.username": "Nome de usuário", + "form.user.label.password": "Senha", + "form.user.label.confirmation": "Confirmação de senha", + "form.user.label.admin": "Administrador", + "form.prefs.label.language": "Idioma", + "form.prefs.label.timezone": "Fuso horário", + "form.prefs.label.theme": "Tema", + "form.prefs.label.entry_sorting": "Ordenação dos itens", + "form.prefs.label.entries_per_page": "Itens por página", + "form.prefs.select.older_first": "Itens mais velhos primeiro", + "form.prefs.select.recent_first": "Itens mais recentes", + "form.prefs.label.keyboard_shortcuts": "Habilitar atalhos do teclado", + "form.prefs.label.show_reading_time": "Mostrar tempo estimado de leitura de artigos", + "form.prefs.label.custom_css": "CSS customizado", + "form.import.label.file": "Arquivo OPML", + "form.import.label.url": "URL", + "form.integration.fever_activate": "Ativar API do Fever", + "form.integration.fever_username": "Nome de usuário do Fever", + "form.integration.fever_password": "Senha do Fever", + "form.integration.fever_endpoint": "Endpoint da API do Fever:", + "form.integration.pinboard_activate": "Salvar itens no Pinboard", + "form.integration.pinboard_token": "Token de API do Pinboard", + "form.integration.pinboard_tags": "Etiquetas (tags) do Pinboard", + "form.integration.pinboard_bookmark": "Salvar marcador como não lído", + "form.integration.instapaper_activate": "Salvar itens no Instapaper", + "form.integration.instapaper_username": "Nome do usuário do Instapaper", + "form.integration.instapaper_password": "Senha do Instapaper", + "form.integration.pocket_activate": "Salvar itens no Pocket", + "form.integration.pocket_consumer_key": "Chave de consumo (Consumer Key) do Pocket", + "form.integration.pocket_access_token": "Token de acesso do Pocket", + "form.integration.pocket_connect_link": "Conectar a conta do Pocket", + "form.integration.wallabag_activate": "Salvar itens no Wallabag", + "form.integration.wallabag_endpoint": "Endpoint da API do Wallabag", + "form.integration.wallabag_client_id": "ID de cliente (Client ID) do Wallabag", + "form.integration.wallabag_client_secret": "Segredo do cliente (Client Secret) do Wallabag", + "form.integration.wallabag_username": "Nome de usuário do Wallabag", + "form.integration.wallabag_password": "Senha do Wallabag", + "form.integration.nunux_keeper_activate": "Salvar itens no Nunux Keeper", + "form.integration.nunux_keeper_endpoint": "Endpoint de API do Nunux Keeper", + "form.integration.nunux_keeper_api_key": "Chave de API do Nunux Keeper", + "form.api_key.label.description": "Etiqueta da chave de API", + "form.submit.loading": "Carregando...", + "form.submit.saving": "Salvando...", + "time_elapsed.not_yet": "ainda não", + "time_elapsed.yesterday": "ontem", + "time_elapsed.now": "agora mesmo", + "time_elapsed.minutes": [ + "há %d minuto", + "há %d minutos" + ], + "time_elapsed.hours": [ + "há %d hora", + "há %d horas" + ], + "time_elapsed.days": [ + "há %d dia", + "há %d dias" + ], + "time_elapsed.weeks": [ + "há %d semana", + "há %d semanas" + ], + "time_elapsed.months": [ + "há %d mês", + "há %d meses" + ], + "time_elapsed.years": [ + "há %d ano", + "há %d anos" + ] } `, "ru_RU": `{ @@ -3046,6 +3091,10 @@ var translations = map[string]string{ "entry.unshare.label": "Удалить из общедоступных", "entry.shared_entry.title": "Открыть публичную ссылку", "entry.shared_entry.label": "Поделиться", + "entry.estimated_reading_time": [ + "%d минута чтения", + "%d минут чтения" + ], "page.shared_entries.title": "Общедоступные записи", "page.unread.title": "Непрочитанное", "page.starred.title": "Избранное", @@ -3230,6 +3279,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "Сначала старые записи", "form.prefs.select.recent_first": "Сначала последние записи", "form.prefs.label.keyboard_shortcuts": "Включить сочетания клавиш", + "form.prefs.label.show_reading_time": "Показать примерное время чтения статей", "form.prefs.label.custom_css": "Пользовательские CSS", "form.import.label.file": "OPML файл", "form.import.label.url": "URL", @@ -3374,6 +3424,10 @@ var translations = map[string]string{ "entry.unshare.label": "取消分享", "entry.shared_entry.title": "打开公共链接", "entry.shared_entry.label": "分享分享", + "entry.estimated_reading_time": [ + "%d分钟阅读", + "%d分钟阅读" + ], "page.shared_entries.title": "共享条目", "page.unread.title": "未读", "page.starred.title": "星标", @@ -3554,6 +3608,7 @@ var translations = map[string]string{ "form.prefs.select.older_first": "旧->新", "form.prefs.select.recent_first": "新->旧", "form.prefs.label.keyboard_shortcuts": "启用键盘快捷键", + "form.prefs.label.show_reading_time": "显示文章的预计阅读时间", "form.prefs.label.custom_css": "自定义CSS", "form.import.label.file": "OPML 文件", "form.import.label.url": "URL", @@ -3629,15 +3684,15 @@ var translations = map[string]string{ } var translationsChecksums = map[string]string{ - "de_DE": "e986a40b1748968725ddede18ae6451e4d1ae270b9c4c033daa81ee50b1d306e", - "en_US": "b27169fc7767e51e6f7610ff1844708e8111e527c7931e3f888864a66826e293", - "es_ES": "20a713468ca6ce00e899a80354912e927ded61cf8a79ad9d976c78f515e242dd", - "fr_FR": "251eb14fe8521bde772d293fa748307ecd4cae4b0597da03aad39e745a382f11", - "it_IT": "8ab664ec8d826aa3702a4f5294c3a3e87193437e64b0ef4990a3a9609b782786", - "ja_JP": "7dc146dc5815a8d6dbae2f7f467deea598a85099bbee63e92bf3862d445519af", - "nl_NL": "fd106f08b2f8902712a68716a0e33b063bdce32a8440f7a2b296b4f822088403", - "pl_PL": "85de665d29e873f6099ef5ea40efe569a05ec3cbf08e4ca7741778bf3d5c8593", - "pt_BR": "193847c5691590926e684894ef971141f69c0e2aaf270457e10331d75a29e34b", - "ru_RU": "6e765e44e250469fe1c5666f8ff24e5e07e6b04098c1325c2663a1f722e0bfe9", - "zh_CN": "0dc8c5b86a03f0ce58f6d2633ab3011d9bc8004af18f922944a65d151e54beda", + "de_DE": "f3dd20afc5cbd9ac689bec2939c1d2fbe71372360c4e8f335e3b8cbce4228958", + "en_US": "30cbcb2170782f1e66f69066947bf053f68065d7b270eea879f2c573819dd52b", + "es_ES": "50dc7c8c2db7368bae133f5b455721470d314321153d41e4f27436a0f3f176e6", + "fr_FR": "373fd2db868961758bd1483c34f117b03aadea17080f268bc8bbd0acdfbc5eed", + "it_IT": "8d8f0bd75b4e7dec9370647c888dd9438b691130d9c41f839cdfff8cbc606cb5", + "ja_JP": "ec3a21c547e4625ad359624e43ba31b556fb8d8b8ff7fc7a20df089317db99b3", + "nl_NL": "20e180be2375f07ec02eb05f372a9102c13037a79e5651ce9bd41507fd2180d2", + "pl_PL": "b1526955641823708b4c1ca753b61e1e0561d0a3d33da3f62170540903031b0d", + "pt_BR": "cf8e131d39daac82d3157c6538c0643392a06358b7bc98be8579412ebd63f60e", + "ru_RU": "4056e4e94861835d44064273371adbbded7190e2b719769886eb99e6c9feaf82", + "zh_CN": "044abb0a34eee3d8d5597811d40166762311b8e4cd08b891796113790cc775f0", } diff --git a/locale/translations/de_DE.json b/locale/translations/de_DE.json index ecf26c0d..c950f00d 100644 --- a/locale/translations/de_DE.json +++ b/locale/translations/de_DE.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Nicht teilen", "entry.shared_entry.title": "Öffnen Sie den öffentlichen Link", "entry.shared_entry.label": "Teilen", + "entry.estimated_reading_time": [ + "%d Minute gelesen", + "%d Minuten gelesen" + ], "page.shared_entries.title": "Geteilte Artikel", "page.unread.title": "Ungelesen", "page.starred.title": "Lesezeichen", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Älteste Artikel zuerst", "form.prefs.select.recent_first": "Neueste Artikel zuerst", "form.prefs.label.keyboard_shortcuts": "Tastaturkürzel aktivieren", + "form.prefs.label.show_reading_time": "Geschätzte Lesezeit für Artikel anzeigen", "form.prefs.label.custom_css": "Benutzerdefiniertes CSS", "form.import.label.file": "OPML Datei", "form.import.label.url": "URL", diff --git a/locale/translations/en_US.json b/locale/translations/en_US.json index 19a0f365..860ef317 100644 --- a/locale/translations/en_US.json +++ b/locale/translations/en_US.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Open the public link", "entry.shared_entry.label": "Share", + "entry.estimated_reading_time": [ + "%d minute read", + "%d minutes read" + ], "page.shared_entries.title": "Shared Entries", "page.unread.title": "Unread", "page.starred.title": "Starred", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Older entries first", "form.prefs.select.recent_first": "Recent entries first", "form.prefs.label.keyboard_shortcuts": "Enable keyboard shortcuts", + "form.prefs.label.show_reading_time": "Show estimated reading time for articles", "form.prefs.label.custom_css": "Custom CSS", "form.import.label.file": "OPML file", "form.import.label.url": "URL", diff --git a/locale/translations/es_ES.json b/locale/translations/es_ES.json index b0a89bc4..4a890d8e 100644 --- a/locale/translations/es_ES.json +++ b/locale/translations/es_ES.json @@ -77,6 +77,10 @@ "entry.unshare.label": "No compartir", "entry.shared_entry.title": "Abrir el enlace público", "entry.shared_entry.label": "Compartir", + "entry.estimated_reading_time": [ + "%d minuto de lectura", + "%d minutos de lectura" + ], "page.shared_entries.title": "Entradas compartidas", "page.unread.title": "No leídos", "page.starred.title": "Marcadores", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Entradas más viejas primero", "form.prefs.select.recent_first": "Entradas recientes primero", "form.prefs.label.keyboard_shortcuts": "Habilitar atajos de teclado", + "form.prefs.label.show_reading_time": "Mostrar el tiempo estimado de lectura de los artículos", "form.prefs.label.custom_css": "CSS personalizado", "form.import.label.file": "Archivo OPML", "form.import.label.url": "URL", diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json index 2f728274..c20d8d32 100644 --- a/locale/translations/fr_FR.json +++ b/locale/translations/fr_FR.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Enlever le partage", "entry.shared_entry.title": "Ouvrir le lien public", "entry.shared_entry.label": "Partage", + "entry.estimated_reading_time": [ + "%d minute de lecture", + "%d minutes de lecture" + ], "page.shared_entries.title": "Articles partagés", "page.unread.title": "Non lus", "page.starred.title": "Favoris", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Ancien éléments en premier", "form.prefs.select.recent_first": "Éléments récents en premier", "form.prefs.label.keyboard_shortcuts": "Activer les raccourcis clavier", + "form.prefs.label.show_reading_time": "Afficher le temps de lecture estimé des articles", "form.prefs.label.custom_css": "CSS personnalisé", "form.import.label.file": "Fichier OPML", "form.import.label.url": "URL", diff --git a/locale/translations/it_IT.json b/locale/translations/it_IT.json index 30322870..77f03d34 100644 --- a/locale/translations/it_IT.json +++ b/locale/translations/it_IT.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Apri il link pubblico", "entry.shared_entry.label": "Condivisione", + "entry.estimated_reading_time": [ + "%d minuto di lettura", + "%d minuti di lettura" + ], "page.shared_entries.title": "Voci condivise", "page.unread.title": "Da leggere", "page.starred.title": "Preferiti", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Prima i più vecchi", "form.prefs.select.recent_first": "Prima i più recenti", "form.prefs.label.keyboard_shortcuts": "Abilita le scorciatoie da tastiera", + "form.prefs.label.show_reading_time": "Mostra il tempo di lettura stimato per gli articoli", "form.prefs.label.custom_css": "CSS personalizzati", "form.import.label.file": "File OPML", "form.import.label.url": "URL", diff --git a/locale/translations/ja_JP.json b/locale/translations/ja_JP.json index 5a1d6cb1..3e3e97f2 100644 --- a/locale/translations/ja_JP.json +++ b/locale/translations/ja_JP.json @@ -77,6 +77,10 @@ "entry.unshare.label": "共有解除", "entry.shared_entry.title": "公開リンクを開く", "entry.shared_entry.label": "共有する", + "entry.estimated_reading_time": [ + "%d分で読む", + "%d分で読む" + ], "page.shared_entries.title": "共有エントリ", "page.unread.title": "未読", "page.starred.title": "星付き", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "古い記事を最初に", "form.prefs.select.recent_first": "新しい記事を最初に", "form.prefs.label.keyboard_shortcuts": "キーボード・ショートカットを有効にする", + "form.prefs.label.show_reading_time": "記事の推定読書時間を表示する", "form.prefs.label.custom_css": "カスタムCSS", "form.import.label.file": "OPML ファイル", "form.import.label.url": "URL", diff --git a/locale/translations/nl_NL.json b/locale/translations/nl_NL.json index 113d6bd7..c50ca705 100644 --- a/locale/translations/nl_NL.json +++ b/locale/translations/nl_NL.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Delen ongedaan maken", "entry.shared_entry.title": "Open de openbare link", "entry.shared_entry.label": "Delen", + "entry.estimated_reading_time": [ + "%d minuut gelezen", + "%d minuten gelezen" + ], "page.shared_entries.title": "Gedeelde vermeldingen", "page.unread.title": "Ongelezen", "page.starred.title": "Favorieten", @@ -259,6 +263,7 @@ "form.prefs.select.older_first": "Oudere items eerst", "form.prefs.select.recent_first": "Recente items eerst", "form.prefs.label.keyboard_shortcuts": "Schakel sneltoetsen in", + "form.prefs.label.show_reading_time": "Toon geschatte leestijd voor artikelen", "form.prefs.label.custom_css": "Aangepaste CSS", "form.import.label.file": "OPML-bestand", "form.import.label.url": "URL", diff --git a/locale/translations/pl_PL.json b/locale/translations/pl_PL.json index db0d8424..8a3a7f92 100644 --- a/locale/translations/pl_PL.json +++ b/locale/translations/pl_PL.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Unshare", "entry.shared_entry.title": "Otwórz publiczny link", "entry.shared_entry.label": "Udostępnianie", + "entry.estimated_reading_time": [ + "%d minuta czytania", + "%d minut czytania" + ], "page.shared_entries.title": "Udostępnione wpisy", "page.unread.title": "Nieprzeczytane", "page.starred.title": "Oznaczone gwiazdką", @@ -260,6 +264,7 @@ "form.prefs.label.entries_per_page": "Wpisy na stronie", "form.prefs.select.older_first": "Najstarsze wpisy jako pierwsze", "form.prefs.label.keyboard_shortcuts": "Włącz skróty klawiaturowe", + "form.prefs.label.show_reading_time": "Pokaż szacowany czas czytania artykułów", "form.prefs.select.recent_first": "Najnowsze wpisy jako pierwsze", "form.prefs.label.custom_css": "Niestandardowy CSS", "form.import.label.file": "Plik OPML", diff --git a/locale/translations/pt_BR.json b/locale/translations/pt_BR.json index d9647777..e425190f 100644 --- a/locale/translations/pt_BR.json +++ b/locale/translations/pt_BR.json @@ -1,319 +1,324 @@ { - "confirm.question": "Tem certeza?", - "confirm.yes": "Sim", - "confirm.no": "Não", - "confirm.loading": "Carregando...", - "action.subscribe": "Inscrever", - "action.save": "Salvar", - "action.or": "Ou", - "action.cancel": "Cancelar", - "action.remove": "Remover", - "action.remove_feed": "Remover fonte", - "action.update": "Atualizar", - "action.edit": "Editar", - "action.download": "Baixar", - "action.import": "Importar", - "action.login": "Iniciar sessão", - "action.home_screen": "Voltar para a tela inicial", - "tooltip.keyboard_shortcuts": "Atalho do teclado: %s", - "tooltip.logged_user": "Autenticado como %s", - "menu.unread": "Não lido", - "menu.starred": "Favoritos", - "menu.history": "Histórico", - "menu.feeds": "Fontes", - "menu.categories": "Categorias", - "menu.settings": "Configurações", - "menu.logout": "Encerrar sessão", - "menu.preferences": "Preferências", - "menu.integrations": "Integrações", - "menu.sessions": "Sessões", - "menu.users": "Usuários", - "menu.about": "Sobre", - "menu.export": "Exportar", - "menu.import": "Importar", - "menu.create_category": "Criar uma categoria", - "menu.mark_page_as_read": "Marcar essa página como lída", - "menu.mark_all_as_read": "Marcar todos como lido", - "menu.show_all_entries": "Mostrar todas os itens", - "menu.show_only_unread_entries": "Mostrar apenas itens não lidos", - "menu.refresh_feed": "Atualizar", - "menu.refresh_all_feeds": "Atualizar todas as fontes", - "menu.edit_feed": "Editar", - "menu.edit_category": "Editar", - "menu.add_feed": "Adicionar inscrição", - "menu.add_user": "Adicionar usuário", - "menu.flush_history": "Limpar histórico", - "menu.feed_entries": "Itens", - "menu.api_keys": "Chaves de API", - "menu.create_api_key": "Criar uma nova chave de API", - "menu.shared_entries": "Itens compartilhados", - "search.label": "Buscar", - "search.placeholder": "Buscar por...", - "pagination.next": "Próximo", - "pagination.previous": "Anterior", - "entry.status.unread": "Não lido", - "entry.status.read": "Lido", - "entry.status.toast.unread": "Marcado como não lido", - "entry.status.toast.read": "Marcado como lido", - "entry.status.title": "Modificar estado deste item", - "entry.bookmark.toggle.on": "Marcar", - "entry.bookmark.toggle.off": "Desmarcar", - "entry.bookmark.toast.on": "Favoritado", - "entry.bookmark.toast.off": "Desfavoritado", - "entry.state.saving": "Salvando...", - "entry.state.loading": "Carregando...", - "entry.save.label": "Salvar", - "entry.save.title": "Salvar esse item", - "entry.save.completed": "Feito!", - "entry.save.toast.completed": "Item guardado", - "entry.scraper.label": "Conteúdo completo", - "entry.scraper.title": "Obter conteúdo completo", - "entry.scraper.completed": "Feito!", - "entry.original.label": "Original", - "entry.comments.label": "Comentários", - "entry.comments.title": "Ver comentários", - "entry.share.label": "Compartilhar", - "entry.share.title": "Compartilhar esse item", - "entry.unshare.label": "Descompartilhar", - "entry.shared_entry.title": "Abrir link público", - "entry.shared_entry.label": "Compartilhar", - "page.shared_entries.title": "Itens compartilhados", - "page.unread.title": "Não lídos", - "page.starred.title": "Favoritos", - "page.categories.title": "Categorias", - "page.categories.no_feed": "Sem fonte.", - "page.categories.entries": "Itens", - "page.categories.feeds": "Inscrições", - "page.categories.feed_count": [ - "Existe %d fonte.", - "Existem %d fontes." - ], - "page.new_category.title": "Nova categoria", - "page.new_user.title": "Novo usuário", - "page.edit_category.title": "Editar categoria: %s", - "page.edit_user.title": "Editar usuário: %s", - "page.feeds.title": "Fontes", - "page.feeds.last_check": "Última verificação:", - "page.feeds.unread_counter": "Numero de itens não lidos", - "page.feeds.read_counter": "Número de itens lidos", - "page.feeds.error_count": [ - "%d erro", - "%d erros" - ], - "page.history.title": "Histórico", - "page.import.title": "Importar", - "page.search.title": "Resultados da busca", - "page.about.title": "Sobre", - "page.about.credits": "Créditos", - "page.about.version": "Versão:", - "page.about.build_date": "Compilado em:", - "page.about.author": "Autor:", - "page.about.license": "Licença:", - "page.add_feed.title": "Nova inscrição", - "page.add_feed.no_category": "Não existe uma categoria. Deve existir pelo menos uma categoria.", - "page.add_feed.label.url": "URL", - "page.add_feed.submit": "Buscar uma fonte", - "page.add_feed.legend.advanced_options": "Opções avançadas", - "page.add_feed.choose_feed": "Escolher uma fonte", - "page.edit_feed.title": "Editar fonte: %s", - "page.edit_feed.last_check": "Última verificação:", - "page.edit_feed.last_modified_header": "Cabeçalho 'LastModified':", - "page.edit_feed.etag_header": "Cabeçalho 'ETag':", - "page.edit_feed.no_header": "Sem cabeçalhos", - "page.edit_feed.last_parsing_error": "Último erro durante processamento", - "page.entry.attachments": "Anexos", - "page.keyboard_shortcuts.title": "Atalhos de teclado", - "page.keyboard_shortcuts.subtitle.sections": "Navegação de seções", - "page.keyboard_shortcuts.subtitle.items": "Navegação de itens", - "page.keyboard_shortcuts.subtitle.pages": "Navegação de páginas", - "page.keyboard_shortcuts.subtitle.actions": "Ações", - "page.keyboard_shortcuts.go_to_unread": "Ir aos não lidos", - "page.keyboard_shortcuts.go_to_starred": "Ir aos favoritos", - "page.keyboard_shortcuts.go_to_history": "Ir ao histórico", - "page.keyboard_shortcuts.go_to_feeds": "Ir as inscrições", - "page.keyboard_shortcuts.go_to_categories": "Ir as categorias", - "page.keyboard_shortcuts.go_to_settings": "Ir as configurações", - "page.keyboard_shortcuts.show_keyboard_shortcuts": "Mostrar atalhos de teclado", - "page.keyboard_shortcuts.go_to_previous_item": "Ir ao item anterior", - "page.keyboard_shortcuts.go_to_next_item": "Ir ao tem seguinte", - "page.keyboard_shortcuts.go_to_feed": "Ir a fonte", - "page.keyboard_shortcuts.go_to_previous_page": "Ir a página anterior", - "page.keyboard_shortcuts.go_to_next_page": "Ir a página seguinte", - "page.keyboard_shortcuts.open_item": "Abrir o item selecionado", - "page.keyboard_shortcuts.open_original": "Abrir o conteúdo original", - "page.keyboard_shortcuts.open_original_same_window": "Abrir o conteúdo original na janela atual", - "page.keyboard_shortcuts.open_comments": "Abrir os comentários", - "page.keyboard_shortcuts.open_comments_same_window": "Abrir os comentários na janela atual", - "page.keyboard_shortcuts.toggle_read_status": "Inverter estado de leitura do item", - "page.keyboard_shortcuts.refresh_all_feeds": "Atualizar todas as fontes", - "page.keyboard_shortcuts.mark_page_as_read": "Marcar página atual como lida", - "page.keyboard_shortcuts.download_content": "Buscar o conteúdo original", - "page.keyboard_shortcuts.toggle_bookmark_status": "Marcar ou desmarcar como favorito", - "page.keyboard_shortcuts.save_article": "Salvar item", - "page.keyboard_shortcuts.remove_feed": "Remover essa fonte", - "page.keyboard_shortcuts.go_to_search": "Ir para o campo de busca", - "page.keyboard_shortcuts.close_modal": "Fechar janela", - "page.users.title": "Usuários", - "page.users.username": "Nome de usuário", - "page.users.never_logged": "Nunca", - "page.users.admin.yes": "Sim", - "page.users.admin.no": "Não", - "page.users.actions": "Ações", - "page.users.last_login": "Último acesso", - "page.users.is_admin": "Administrador", - "page.settings.title": "Ajustes", - "page.settings.link_google_account": "Vincular minha conta do Google", - "page.settings.unlink_google_account": "Desvincular minha conta do Google", - "page.settings.link_oidc_account": "Vincular minha conta do OpenID Connect", - "page.settings.unlink_oidc_account": "Desvincular minha conta do OpenID Connect", - "page.login.title": "Iniciar Sessão", - "page.login.google_signin": "Iniciar Sessão com sua conta do Google", - "page.login.oidc_signin": "Iniciar Sessão com sua conta do OpenID Connect", - "page.integrations.title": "Integrações", - "page.integration.miniflux_api": "API do Miniflux", - "page.integration.miniflux_api_endpoint": "Endpoint da API", - "page.integration.miniflux_api_username": "Nome de usuário", - "page.integration.miniflux_api_password": "Senha", - "page.integration.miniflux_api_password_value": "Senha da sua Conta", - "page.integration.bookmarklet": "Bookmarklet", - "page.integration.bookmarklet.name": "Adicionar ao Miniflux", - "page.integration.bookmarklet.instructions": "Arrasta e solta esse link para os favoritos do teu navegador.", - "page.integration.bookmarklet.help": "Esse link especial permite você se inscrever a um site diretamente usando favorito do navegador.", - "page.sessions.title": "Sessões", - "page.sessions.table.date": "Data", - "page.sessions.table.ip": "Endereço IP", - "page.sessions.table.user_agent": "Agente de usuário", - "page.sessions.table.actions": "Ações", - "page.sessions.table.current_session": "Sessão Atual", - "page.api_keys.title": "Chaves de API", - "page.api_keys.table.description": "Descrição", - "page.api_keys.table.token": "Token", - "page.api_keys.table.last_used_at": "Ultima utilização", - "page.api_keys.table.created_at": "Data de criação", - "page.api_keys.table.actions": "Ações", - "page.api_keys.never_used": "Nunca usado", - "page.new_api_key.title": "Nova chave de API", - "alert.no_shared_entry": "Não há itens compartilhados.", - "alert.no_bookmark": "Não há favorito neste momento.", - "alert.no_category": "Não há categoria.", - "alert.no_category_entry": "Não há itens nesta categoria.", - "alert.no_feed_entry": "Não há itens nessa fonte.", - "alert.no_feed": "Não há inscrições.", - "alert.no_feed_in_category": "Não há inscrições nessa categoria.", - "alert.no_history": "Não há histórico nesse momento.", - "alert.feed_error": "Ocorreu um problema com esta fonte.", - "alert.no_search_result": "Não há resultados para essa busca.", - "alert.no_unread_entry": "Não há itens não lidos.", - "alert.no_user": "Você é o único usuário.", - "alert.account_unlinked": "Sua conta externa está desvinculada!", - "alert.account_linked": "Sua conta externa está vinculada!", - "alert.pocket_linked": "Sua conta do Pocket está vinculada!", - "alert.prefs_saved": "Suas preferências foram salvas!", - "error.unlink_account_without_password": "Você deve definir uma senha, senão não será possível efetuar a sessão novamente.", - "error.duplicate_linked_account": "Alguém já está vinculado a esse serviço!", - "error.duplicate_fever_username": "Alguém já está utilizando esse nome de usuário do Fever!", - "error.pocket_request_token": "Não foi possível obter um pedido de token no Pocket!", - "error.pocket_access_token": "Não foi possível obter um token de acesso no Pocket!", - "error.category_already_exists": "Esta categoria já existe.", - "error.unable_to_create_category": "Não foi possível criar essa categoria.", - "error.unable_to_update_category": "Não foi possível atualizar essa categoria.", - "error.user_already_exists": "Esse usuário já existe.", - "error.unable_to_create_user": "Não foi possível criar esse usuário.", - "error.unable_to_update_user": "Não foi possível atualizar esse usuário.", - "error.unable_to_update_feed": "Não foi possível atualizar essa fonte.", - "error.subscription_not_found": "Não foi possível encontrar uma inscrição.", - "error.empty_file": "Esse arquivo está vazio.", - "error.bad_credentials": "Usuário ou senha são inválidos.", - "error.fields_mandatory": "Todos os campos são obrigatórios.", - "error.title_required": "O título é obrigatório.", - "error.different_passwords": "As senhas não são iguais.", - "error.password_min_length": "A senha deve ter no mínimo 6 caracteres.", - "error.settings_mandatory_fields": "Os campos de nome de usuário, tema, idioma e fuso horário são obrigatórios.", - "error.entries_per_page_invalid": "O número de itens por página é inválido.", - "error.feed_mandatory_fields": "O campo de URL e categoria são obrigatórios.", - "error.user_mandatory_fields": "O nome de usuário é obrigatório.", - "error.api_key_already_exists": "Essa chave de API já existe.", - "error.unable_to_create_api_key": "Não foi possível criar uma chave de API.", - "form.feed.label.title": "Título", - "form.feed.label.site_url": "URL do site", - "form.feed.label.feed_url": "URL da fonte", - "form.feed.label.category": "Categoria", - "form.feed.label.crawler": "Obter conteúdo original", - "form.feed.label.feed_username": "Nome de usuário da fonte", - "form.feed.label.feed_password": "Senha da fonte", - "form.feed.label.user_agent": "Sobrescrever o agente de usuário (user-agent) padrão", - "form.feed.label.scraper_rules": "Regras do scraper", - "form.feed.label.rewrite_rules": "Regras para o Rewrite", - "form.feed.label.ignore_http_cache": "Ignorar cache HTTP", - "form.feed.label.disabled": "Não atualizar esta fonte", - "form.category.label.title": "Título", - "form.user.label.username": "Nome de usuário", - "form.user.label.password": "Senha", - "form.user.label.confirmation": "Confirmação de senha", - "form.user.label.admin": "Administrador", - "form.prefs.label.language": "Idioma", - "form.prefs.label.timezone": "Fuso horário", - "form.prefs.label.theme": "Tema", - "form.prefs.label.entry_sorting": "Ordenação dos itens", - "form.prefs.label.entries_per_page": "Itens por página", - "form.prefs.select.older_first": "Itens mais velhos primeiro", - "form.prefs.select.recent_first": "Itens mais recentes", - "form.prefs.label.keyboard_shortcuts": "Habilitar atalhos do teclado", - "form.prefs.label.custom_css": "CSS customizado", - "form.import.label.file": "Arquivo OPML", - "form.import.label.url": "URL", - "form.integration.fever_activate": "Ativar API do Fever", - "form.integration.fever_username": "Nome de usuário do Fever", - "form.integration.fever_password": "Senha do Fever", - "form.integration.fever_endpoint": "Endpoint da API do Fever:", - "form.integration.pinboard_activate": "Salvar itens no Pinboard", - "form.integration.pinboard_token": "Token de API do Pinboard", - "form.integration.pinboard_tags": "Etiquetas (tags) do Pinboard", - "form.integration.pinboard_bookmark": "Salvar marcador como não lído", - "form.integration.instapaper_activate": "Salvar itens no Instapaper", - "form.integration.instapaper_username": "Nome do usuário do Instapaper", - "form.integration.instapaper_password": "Senha do Instapaper", - "form.integration.pocket_activate": "Salvar itens no Pocket", - "form.integration.pocket_consumer_key": "Chave de consumo (Consumer Key) do Pocket", - "form.integration.pocket_access_token": "Token de acesso do Pocket", - "form.integration.pocket_connect_link": "Conectar a conta do Pocket", - "form.integration.wallabag_activate": "Salvar itens no Wallabag", - "form.integration.wallabag_endpoint": "Endpoint da API do Wallabag", - "form.integration.wallabag_client_id": "ID de cliente (Client ID) do Wallabag", - "form.integration.wallabag_client_secret": "Segredo do cliente (Client Secret) do Wallabag", - "form.integration.wallabag_username": "Nome de usuário do Wallabag", - "form.integration.wallabag_password": "Senha do Wallabag", - "form.integration.nunux_keeper_activate": "Salvar itens no Nunux Keeper", - "form.integration.nunux_keeper_endpoint": "Endpoint de API do Nunux Keeper", - "form.integration.nunux_keeper_api_key": "Chave de API do Nunux Keeper", - "form.api_key.label.description": "Etiqueta da chave de API", - "form.submit.loading": "Carregando...", - "form.submit.saving": "Salvando...", - "time_elapsed.not_yet": "ainda não", - "time_elapsed.yesterday": "ontem", - "time_elapsed.now": "agora mesmo", - "time_elapsed.minutes": [ - "há %d minuto", - "há %d minutos" - ], - "time_elapsed.hours": [ - "há %d hora", - "há %d horas" - ], - "time_elapsed.days": [ - "há %d dia", - "há %d dias" - ], - "time_elapsed.weeks": [ - "há %d semana", - "há %d semanas" - ], - "time_elapsed.months": [ - "há %d mês", - "há %d meses" - ], - "time_elapsed.years": [ - "há %d ano", - "há %d anos" - ] + "confirm.question": "Tem certeza?", + "confirm.yes": "Sim", + "confirm.no": "Não", + "confirm.loading": "Carregando...", + "action.subscribe": "Inscrever", + "action.save": "Salvar", + "action.or": "Ou", + "action.cancel": "Cancelar", + "action.remove": "Remover", + "action.remove_feed": "Remover fonte", + "action.update": "Atualizar", + "action.edit": "Editar", + "action.download": "Baixar", + "action.import": "Importar", + "action.login": "Iniciar sessão", + "action.home_screen": "Voltar para a tela inicial", + "tooltip.keyboard_shortcuts": "Atalho do teclado: %s", + "tooltip.logged_user": "Autenticado como %s", + "menu.unread": "Não lido", + "menu.starred": "Favoritos", + "menu.history": "Histórico", + "menu.feeds": "Fontes", + "menu.categories": "Categorias", + "menu.settings": "Configurações", + "menu.logout": "Encerrar sessão", + "menu.preferences": "Preferências", + "menu.integrations": "Integrações", + "menu.sessions": "Sessões", + "menu.users": "Usuários", + "menu.about": "Sobre", + "menu.export": "Exportar", + "menu.import": "Importar", + "menu.create_category": "Criar uma categoria", + "menu.mark_page_as_read": "Marcar essa página como lída", + "menu.mark_all_as_read": "Marcar todos como lido", + "menu.show_all_entries": "Mostrar todas os itens", + "menu.show_only_unread_entries": "Mostrar apenas itens não lidos", + "menu.refresh_feed": "Atualizar", + "menu.refresh_all_feeds": "Atualizar todas as fontes", + "menu.edit_feed": "Editar", + "menu.edit_category": "Editar", + "menu.add_feed": "Adicionar inscrição", + "menu.add_user": "Adicionar usuário", + "menu.flush_history": "Limpar histórico", + "menu.feed_entries": "Itens", + "menu.api_keys": "Chaves de API", + "menu.create_api_key": "Criar uma nova chave de API", + "menu.shared_entries": "Itens compartilhados", + "search.label": "Buscar", + "search.placeholder": "Buscar por...", + "pagination.next": "Próximo", + "pagination.previous": "Anterior", + "entry.status.unread": "Não lido", + "entry.status.read": "Lido", + "entry.status.toast.unread": "Marcado como não lido", + "entry.status.toast.read": "Marcado como lido", + "entry.status.title": "Modificar estado deste item", + "entry.bookmark.toggle.on": "Marcar", + "entry.bookmark.toggle.off": "Desmarcar", + "entry.bookmark.toast.on": "Favoritado", + "entry.bookmark.toast.off": "Desfavoritado", + "entry.state.saving": "Salvando...", + "entry.state.loading": "Carregando...", + "entry.save.label": "Salvar", + "entry.save.title": "Salvar esse item", + "entry.save.completed": "Feito!", + "entry.save.toast.completed": "Item guardado", + "entry.scraper.label": "Conteúdo completo", + "entry.scraper.title": "Obter conteúdo completo", + "entry.scraper.completed": "Feito!", + "entry.original.label": "Original", + "entry.comments.label": "Comentários", + "entry.comments.title": "Ver comentários", + "entry.share.label": "Compartilhar", + "entry.share.title": "Compartilhar esse item", + "entry.unshare.label": "Descompartilhar", + "entry.shared_entry.title": "Abrir link público", + "entry.shared_entry.label": "Compartilhar", + "entry.estimated_reading_time": [ + "%d minuto lido", + "%d minutos lidos" + ], + "page.shared_entries.title": "Itens compartilhados", + "page.unread.title": "Não lídos", + "page.starred.title": "Favoritos", + "page.categories.title": "Categorias", + "page.categories.no_feed": "Sem fonte.", + "page.categories.entries": "Itens", + "page.categories.feeds": "Inscrições", + "page.categories.feed_count": [ + "Existe %d fonte.", + "Existem %d fontes." + ], + "page.new_category.title": "Nova categoria", + "page.new_user.title": "Novo usuário", + "page.edit_category.title": "Editar categoria: %s", + "page.edit_user.title": "Editar usuário: %s", + "page.feeds.title": "Fontes", + "page.feeds.last_check": "Última verificação:", + "page.feeds.unread_counter": "Numero de itens não lidos", + "page.feeds.read_counter": "Número de itens lidos", + "page.feeds.error_count": [ + "%d erro", + "%d erros" + ], + "page.history.title": "Histórico", + "page.import.title": "Importar", + "page.search.title": "Resultados da busca", + "page.about.title": "Sobre", + "page.about.credits": "Créditos", + "page.about.version": "Versão:", + "page.about.build_date": "Compilado em:", + "page.about.author": "Autor:", + "page.about.license": "Licença:", + "page.add_feed.title": "Nova inscrição", + "page.add_feed.no_category": "Não existe uma categoria. Deve existir pelo menos uma categoria.", + "page.add_feed.label.url": "URL", + "page.add_feed.submit": "Buscar uma fonte", + "page.add_feed.legend.advanced_options": "Opções avançadas", + "page.add_feed.choose_feed": "Escolher uma fonte", + "page.edit_feed.title": "Editar fonte: %s", + "page.edit_feed.last_check": "Última verificação:", + "page.edit_feed.last_modified_header": "Cabeçalho 'LastModified':", + "page.edit_feed.etag_header": "Cabeçalho 'ETag':", + "page.edit_feed.no_header": "Sem cabeçalhos", + "page.edit_feed.last_parsing_error": "Último erro durante processamento", + "page.entry.attachments": "Anexos", + "page.keyboard_shortcuts.title": "Atalhos de teclado", + "page.keyboard_shortcuts.subtitle.sections": "Navegação de seções", + "page.keyboard_shortcuts.subtitle.items": "Navegação de itens", + "page.keyboard_shortcuts.subtitle.pages": "Navegação de páginas", + "page.keyboard_shortcuts.subtitle.actions": "Ações", + "page.keyboard_shortcuts.go_to_unread": "Ir aos não lidos", + "page.keyboard_shortcuts.go_to_starred": "Ir aos favoritos", + "page.keyboard_shortcuts.go_to_history": "Ir ao histórico", + "page.keyboard_shortcuts.go_to_feeds": "Ir as inscrições", + "page.keyboard_shortcuts.go_to_categories": "Ir as categorias", + "page.keyboard_shortcuts.go_to_settings": "Ir as configurações", + "page.keyboard_shortcuts.show_keyboard_shortcuts": "Mostrar atalhos de teclado", + "page.keyboard_shortcuts.go_to_previous_item": "Ir ao item anterior", + "page.keyboard_shortcuts.go_to_next_item": "Ir ao tem seguinte", + "page.keyboard_shortcuts.go_to_feed": "Ir a fonte", + "page.keyboard_shortcuts.go_to_previous_page": "Ir a página anterior", + "page.keyboard_shortcuts.go_to_next_page": "Ir a página seguinte", + "page.keyboard_shortcuts.open_item": "Abrir o item selecionado", + "page.keyboard_shortcuts.open_original": "Abrir o conteúdo original", + "page.keyboard_shortcuts.open_original_same_window": "Abrir o conteúdo original na janela atual", + "page.keyboard_shortcuts.open_comments": "Abrir os comentários", + "page.keyboard_shortcuts.open_comments_same_window": "Abrir os comentários na janela atual", + "page.keyboard_shortcuts.toggle_read_status": "Inverter estado de leitura do item", + "page.keyboard_shortcuts.refresh_all_feeds": "Atualizar todas as fontes", + "page.keyboard_shortcuts.mark_page_as_read": "Marcar página atual como lida", + "page.keyboard_shortcuts.download_content": "Buscar o conteúdo original", + "page.keyboard_shortcuts.toggle_bookmark_status": "Marcar ou desmarcar como favorito", + "page.keyboard_shortcuts.save_article": "Salvar item", + "page.keyboard_shortcuts.remove_feed": "Remover essa fonte", + "page.keyboard_shortcuts.go_to_search": "Ir para o campo de busca", + "page.keyboard_shortcuts.close_modal": "Fechar janela", + "page.users.title": "Usuários", + "page.users.username": "Nome de usuário", + "page.users.never_logged": "Nunca", + "page.users.admin.yes": "Sim", + "page.users.admin.no": "Não", + "page.users.actions": "Ações", + "page.users.last_login": "Último acesso", + "page.users.is_admin": "Administrador", + "page.settings.title": "Ajustes", + "page.settings.link_google_account": "Vincular minha conta do Google", + "page.settings.unlink_google_account": "Desvincular minha conta do Google", + "page.settings.link_oidc_account": "Vincular minha conta do OpenID Connect", + "page.settings.unlink_oidc_account": "Desvincular minha conta do OpenID Connect", + "page.login.title": "Iniciar Sessão", + "page.login.google_signin": "Iniciar Sessão com sua conta do Google", + "page.login.oidc_signin": "Iniciar Sessão com sua conta do OpenID Connect", + "page.integrations.title": "Integrações", + "page.integration.miniflux_api": "API do Miniflux", + "page.integration.miniflux_api_endpoint": "Endpoint da API", + "page.integration.miniflux_api_username": "Nome de usuário", + "page.integration.miniflux_api_password": "Senha", + "page.integration.miniflux_api_password_value": "Senha da sua Conta", + "page.integration.bookmarklet": "Bookmarklet", + "page.integration.bookmarklet.name": "Adicionar ao Miniflux", + "page.integration.bookmarklet.instructions": "Arrasta e solta esse link para os favoritos do teu navegador.", + "page.integration.bookmarklet.help": "Esse link especial permite você se inscrever a um site diretamente usando favorito do navegador.", + "page.sessions.title": "Sessões", + "page.sessions.table.date": "Data", + "page.sessions.table.ip": "Endereço IP", + "page.sessions.table.user_agent": "Agente de usuário", + "page.sessions.table.actions": "Ações", + "page.sessions.table.current_session": "Sessão Atual", + "page.api_keys.title": "Chaves de API", + "page.api_keys.table.description": "Descrição", + "page.api_keys.table.token": "Token", + "page.api_keys.table.last_used_at": "Ultima utilização", + "page.api_keys.table.created_at": "Data de criação", + "page.api_keys.table.actions": "Ações", + "page.api_keys.never_used": "Nunca usado", + "page.new_api_key.title": "Nova chave de API", + "alert.no_shared_entry": "Não há itens compartilhados.", + "alert.no_bookmark": "Não há favorito neste momento.", + "alert.no_category": "Não há categoria.", + "alert.no_category_entry": "Não há itens nesta categoria.", + "alert.no_feed_entry": "Não há itens nessa fonte.", + "alert.no_feed": "Não há inscrições.", + "alert.no_feed_in_category": "Não há inscrições nessa categoria.", + "alert.no_history": "Não há histórico nesse momento.", + "alert.feed_error": "Ocorreu um problema com esta fonte.", + "alert.no_search_result": "Não há resultados para essa busca.", + "alert.no_unread_entry": "Não há itens não lidos.", + "alert.no_user": "Você é o único usuário.", + "alert.account_unlinked": "Sua conta externa está desvinculada!", + "alert.account_linked": "Sua conta externa está vinculada!", + "alert.pocket_linked": "Sua conta do Pocket está vinculada!", + "alert.prefs_saved": "Suas preferências foram salvas!", + "error.unlink_account_without_password": "Você deve definir uma senha, senão não será possível efetuar a sessão novamente.", + "error.duplicate_linked_account": "Alguém já está vinculado a esse serviço!", + "error.duplicate_fever_username": "Alguém já está utilizando esse nome de usuário do Fever!", + "error.pocket_request_token": "Não foi possível obter um pedido de token no Pocket!", + "error.pocket_access_token": "Não foi possível obter um token de acesso no Pocket!", + "error.category_already_exists": "Esta categoria já existe.", + "error.unable_to_create_category": "Não foi possível criar essa categoria.", + "error.unable_to_update_category": "Não foi possível atualizar essa categoria.", + "error.user_already_exists": "Esse usuário já existe.", + "error.unable_to_create_user": "Não foi possível criar esse usuário.", + "error.unable_to_update_user": "Não foi possível atualizar esse usuário.", + "error.unable_to_update_feed": "Não foi possível atualizar essa fonte.", + "error.subscription_not_found": "Não foi possível encontrar uma inscrição.", + "error.empty_file": "Esse arquivo está vazio.", + "error.bad_credentials": "Usuário ou senha são inválidos.", + "error.fields_mandatory": "Todos os campos são obrigatórios.", + "error.title_required": "O título é obrigatório.", + "error.different_passwords": "As senhas não são iguais.", + "error.password_min_length": "A senha deve ter no mínimo 6 caracteres.", + "error.settings_mandatory_fields": "Os campos de nome de usuário, tema, idioma e fuso horário são obrigatórios.", + "error.entries_per_page_invalid": "O número de itens por página é inválido.", + "error.feed_mandatory_fields": "O campo de URL e categoria são obrigatórios.", + "error.user_mandatory_fields": "O nome de usuário é obrigatório.", + "error.api_key_already_exists": "Essa chave de API já existe.", + "error.unable_to_create_api_key": "Não foi possível criar uma chave de API.", + "form.feed.label.title": "Título", + "form.feed.label.site_url": "URL do site", + "form.feed.label.feed_url": "URL da fonte", + "form.feed.label.category": "Categoria", + "form.feed.label.crawler": "Obter conteúdo original", + "form.feed.label.feed_username": "Nome de usuário da fonte", + "form.feed.label.feed_password": "Senha da fonte", + "form.feed.label.user_agent": "Sobrescrever o agente de usuário (user-agent) padrão", + "form.feed.label.scraper_rules": "Regras do scraper", + "form.feed.label.rewrite_rules": "Regras para o Rewrite", + "form.feed.label.ignore_http_cache": "Ignorar cache HTTP", + "form.feed.label.disabled": "Não atualizar esta fonte", + "form.category.label.title": "Título", + "form.user.label.username": "Nome de usuário", + "form.user.label.password": "Senha", + "form.user.label.confirmation": "Confirmação de senha", + "form.user.label.admin": "Administrador", + "form.prefs.label.language": "Idioma", + "form.prefs.label.timezone": "Fuso horário", + "form.prefs.label.theme": "Tema", + "form.prefs.label.entry_sorting": "Ordenação dos itens", + "form.prefs.label.entries_per_page": "Itens por página", + "form.prefs.select.older_first": "Itens mais velhos primeiro", + "form.prefs.select.recent_first": "Itens mais recentes", + "form.prefs.label.keyboard_shortcuts": "Habilitar atalhos do teclado", + "form.prefs.label.show_reading_time": "Mostrar tempo estimado de leitura de artigos", + "form.prefs.label.custom_css": "CSS customizado", + "form.import.label.file": "Arquivo OPML", + "form.import.label.url": "URL", + "form.integration.fever_activate": "Ativar API do Fever", + "form.integration.fever_username": "Nome de usuário do Fever", + "form.integration.fever_password": "Senha do Fever", + "form.integration.fever_endpoint": "Endpoint da API do Fever:", + "form.integration.pinboard_activate": "Salvar itens no Pinboard", + "form.integration.pinboard_token": "Token de API do Pinboard", + "form.integration.pinboard_tags": "Etiquetas (tags) do Pinboard", + "form.integration.pinboard_bookmark": "Salvar marcador como não lído", + "form.integration.instapaper_activate": "Salvar itens no Instapaper", + "form.integration.instapaper_username": "Nome do usuário do Instapaper", + "form.integration.instapaper_password": "Senha do Instapaper", + "form.integration.pocket_activate": "Salvar itens no Pocket", + "form.integration.pocket_consumer_key": "Chave de consumo (Consumer Key) do Pocket", + "form.integration.pocket_access_token": "Token de acesso do Pocket", + "form.integration.pocket_connect_link": "Conectar a conta do Pocket", + "form.integration.wallabag_activate": "Salvar itens no Wallabag", + "form.integration.wallabag_endpoint": "Endpoint da API do Wallabag", + "form.integration.wallabag_client_id": "ID de cliente (Client ID) do Wallabag", + "form.integration.wallabag_client_secret": "Segredo do cliente (Client Secret) do Wallabag", + "form.integration.wallabag_username": "Nome de usuário do Wallabag", + "form.integration.wallabag_password": "Senha do Wallabag", + "form.integration.nunux_keeper_activate": "Salvar itens no Nunux Keeper", + "form.integration.nunux_keeper_endpoint": "Endpoint de API do Nunux Keeper", + "form.integration.nunux_keeper_api_key": "Chave de API do Nunux Keeper", + "form.api_key.label.description": "Etiqueta da chave de API", + "form.submit.loading": "Carregando...", + "form.submit.saving": "Salvando...", + "time_elapsed.not_yet": "ainda não", + "time_elapsed.yesterday": "ontem", + "time_elapsed.now": "agora mesmo", + "time_elapsed.minutes": [ + "há %d minuto", + "há %d minutos" + ], + "time_elapsed.hours": [ + "há %d hora", + "há %d horas" + ], + "time_elapsed.days": [ + "há %d dia", + "há %d dias" + ], + "time_elapsed.weeks": [ + "há %d semana", + "há %d semanas" + ], + "time_elapsed.months": [ + "há %d mês", + "há %d meses" + ], + "time_elapsed.years": [ + "há %d ano", + "há %d anos" + ] } diff --git a/locale/translations/ru_RU.json b/locale/translations/ru_RU.json index db658fa1..197e1f72 100644 --- a/locale/translations/ru_RU.json +++ b/locale/translations/ru_RU.json @@ -77,6 +77,10 @@ "entry.unshare.label": "Удалить из общедоступных", "entry.shared_entry.title": "Открыть публичную ссылку", "entry.shared_entry.label": "Поделиться", + "entry.estimated_reading_time": [ + "%d минута чтения", + "%d минут чтения" + ], "page.shared_entries.title": "Общедоступные записи", "page.unread.title": "Непрочитанное", "page.starred.title": "Избранное", @@ -261,6 +265,7 @@ "form.prefs.select.older_first": "Сначала старые записи", "form.prefs.select.recent_first": "Сначала последние записи", "form.prefs.label.keyboard_shortcuts": "Включить сочетания клавиш", + "form.prefs.label.show_reading_time": "Показать примерное время чтения статей", "form.prefs.label.custom_css": "Пользовательские CSS", "form.import.label.file": "OPML файл", "form.import.label.url": "URL", diff --git a/locale/translations/zh_CN.json b/locale/translations/zh_CN.json index 2b0cf222..57313fe6 100644 --- a/locale/translations/zh_CN.json +++ b/locale/translations/zh_CN.json @@ -77,6 +77,10 @@ "entry.unshare.label": "取消分享", "entry.shared_entry.title": "打开公共链接", "entry.shared_entry.label": "分享分享", + "entry.estimated_reading_time": [ + "%d分钟阅读", + "%d分钟阅读" + ], "page.shared_entries.title": "共享条目", "page.unread.title": "未读", "page.starred.title": "星标", @@ -257,6 +261,7 @@ "form.prefs.select.older_first": "旧->新", "form.prefs.select.recent_first": "新->旧", "form.prefs.label.keyboard_shortcuts": "启用键盘快捷键", + "form.prefs.label.show_reading_time": "显示文章的预计阅读时间", "form.prefs.label.custom_css": "自定义CSS", "form.import.label.file": "OPML 文件", "form.import.label.url": "URL", diff --git a/model/user.go b/model/user.go index 2a0d4773..52564c98 100644 --- a/model/user.go +++ b/model/user.go @@ -23,6 +23,7 @@ type User struct { EntryDirection string `json:"entry_sorting_direction"` EntriesPerPage int `json:"entries_per_page"` KeyboardShortcuts bool `json:"keyboard_shortcuts"` + ShowReadingTime bool `json:"show_reading_time"` LastLoginAt *time.Time `json:"last_login_at,omitempty"` Extra map[string]string `json:"extra"` } diff --git a/storage/user.go b/storage/user.go index 9001443b..6ec116f7 100644 --- a/storage/user.go +++ b/storage/user.go @@ -64,7 +64,7 @@ func (s *Storage) CreateUser(user *model.User) (err error) { VALUES (LOWER($1), $2, $3, $4) RETURNING - id, username, is_admin, language, theme, timezone, entry_direction, entries_per_page, keyboard_shortcuts + id, username, is_admin, language, theme, timezone, entry_direction, entries_per_page, keyboard_shortcuts, show_reading_time ` err = s.db.QueryRow(query, user.Username, password, user.IsAdmin, extra).Scan( @@ -77,6 +77,7 @@ func (s *Storage) CreateUser(user *model.User) (err error) { &user.EntryDirection, &user.EntriesPerPage, &user.KeyboardShortcuts, + &user.ShowReadingTime, ) if err != nil { return fmt.Errorf(`store: unable to create user: %v`, err) @@ -125,9 +126,10 @@ func (s *Storage) UpdateUser(user *model.User) error { timezone=$6, entry_direction=$7, entries_per_page=$8, - keyboard_shortcuts=$9 + keyboard_shortcuts=$9, + show_reading_time=$10 WHERE - id=$10 + id=$11 ` _, err = s.db.Exec( @@ -141,6 +143,7 @@ func (s *Storage) UpdateUser(user *model.User) error { user.EntryDirection, user.EntriesPerPage, user.KeyboardShortcuts, + user.ShowReadingTime, user.ID, ) if err != nil { @@ -156,9 +159,10 @@ func (s *Storage) UpdateUser(user *model.User) error { timezone=$5, entry_direction=$6, entries_per_page=$7, - keyboard_shortcuts=$8 + keyboard_shortcuts=$8, + show_reading_time=$9 WHERE - id=$9 + id=$10 ` _, err := s.db.Exec( @@ -171,6 +175,7 @@ func (s *Storage) UpdateUser(user *model.User) error { user.EntryDirection, user.EntriesPerPage, user.KeyboardShortcuts, + user.ShowReadingTime, user.ID, ) @@ -209,6 +214,7 @@ func (s *Storage) UserByID(userID int64) (*model.User, error) { entry_direction, entries_per_page, keyboard_shortcuts, + show_reading_time, last_login_at, extra FROM @@ -232,6 +238,7 @@ func (s *Storage) UserByUsername(username string) (*model.User, error) { entry_direction, entries_per_page, keyboard_shortcuts, + show_reading_time, last_login_at, extra FROM @@ -255,6 +262,7 @@ func (s *Storage) UserByExtraField(field, value string) (*model.User, error) { entry_direction, entries_per_page, keyboard_shortcuts, + show_reading_time, last_login_at, extra FROM @@ -278,6 +286,7 @@ func (s *Storage) UserByAPIKey(token string) (*model.User, error) { u.entry_direction, u.entries_per_page, u.keyboard_shortcuts, + u.show_reading_time, u.last_login_at, u.extra FROM @@ -304,6 +313,7 @@ func (s *Storage) fetchUser(query string, args ...interface{}) (*model.User, err &user.EntryDirection, &user.EntriesPerPage, &user.KeyboardShortcuts, + &user.ShowReadingTime, &user.LastLoginAt, &extra, ) @@ -360,6 +370,7 @@ func (s *Storage) Users() (model.Users, error) { entry_direction, entries_per_page, keyboard_shortcuts, + show_reading_time, last_login_at, extra FROM @@ -386,6 +397,7 @@ func (s *Storage) Users() (model.Users, error) { &user.EntryDirection, &user.EntriesPerPage, &user.KeyboardShortcuts, + &user.ShowReadingTime, &user.LastLoginAt, &extra, ) diff --git a/template/common.go b/template/common.go index 4031d3fc..bc37f2f8 100644 --- a/template/common.go +++ b/template/common.go @@ -237,6 +237,13 @@ SOFTWARE.
  • + {{ if .user.ShowReadingTime }} +
  • + + {{ plural "entry.estimated_reading_time" (timeToRead .entry.Content) (timeToRead .entry.Content) }} + +
  • + {{ end }}