diff --git a/CHANGELOG b/CHANGELOG index 25deec3c..20fea8ac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,8 @@ +v 2.3.0 + - dropwizard upgrade 0.9.1 + - feed enclosures are hidden if they already displayed in the content + - fix youtube favicons + - various internationalization fixes v 2.2.0 - fix youtube and instagram favicon fetching - mark as read filter was lost when a feed was rearranged with drag&drop diff --git a/README.md b/README.md index 099d9ac0..e2698128 100644 --- a/README.md +++ b/README.md @@ -16,8 +16,8 @@ Browser extensions: [Chrome](https://github.com/Athou/commafeed-chrome) - [Firef ### The very short version (download precompiled package) mkdir commafeed && cd commafeed - wget https://github.com/Athou/commafeed/releases/download/2.2.0/commafeed.jar - wget https://raw.githubusercontent.com/Athou/commafeed/2.2.0/config.yml.example -O config.yml + wget https://github.com/Athou/commafeed/releases/download/2.3.0/commafeed.jar + wget https://raw.githubusercontent.com/Athou/commafeed/2.3.0/config.yml.example -O config.yml vi config.yml java -Djava.net.preferIPv4Stack=true -jar commafeed.jar server config.yml @@ -39,7 +39,12 @@ You also need the Java 1.8+ JDK in order to build the application. To install the required packages to build CommaFeed on Ubuntu, issue the following commands + # if openjdk-8-jdk is not available on your ubuntu version (14.04 LTS), add the following repo first + sudo add-apt-repository ppa:openjdk-r/ppa + sudo apt-get update + sudo apt-get install g++ build-essential openjdk-8-jdk + # Make sure java8 is the selected java version sudo update-alternatives --config java sudo update-alternatives --config javac @@ -118,7 +123,7 @@ Steps to configuring a development environment for CommaFeed may include, but ma ## Copyright and license -Copyright 2013-2015 CommaFeed. +Copyright 2013-2016 CommaFeed. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this work except in compliance with the License. diff --git a/config.dev.yml b/config.dev.yml index a7771204..eadcda9c 100644 --- a/config.dev.yml +++ b/config.dev.yml @@ -75,7 +75,7 @@ app: database: driverClass: org.h2.Driver - url: jdbc:h2:./target/example;mv_store=false + url: jdbc:h2:./target/example user: sa password: sa properties: diff --git a/pom.xml b/pom.xml index a12a52c0..33507b8b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.commafeed commafeed - 2.3.0-SNAPSHOT + 2.4.0-SNAPSHOT jar CommaFeed @@ -15,7 +15,7 @@ UTF-8 1.8 - 0.9.0-rc2 + 0.9.1 4.0 4.0.2 1.5.0 @@ -132,7 +132,7 @@ com.github.kongchen swagger-maven-plugin - 3.1.0 + 3.1.1 @@ -143,10 +143,9 @@ CommaFeed ${project.version} - - - - + + com.commafeed.backend.model.User + @@ -162,7 +161,7 @@ com.github.eirslett frontend-maven-plugin - 0.0.24 + 0.0.25 install node and npm @@ -172,7 +171,7 @@ compile v0.10.39 - 2.12.1 + 3.10.6 @@ -181,6 +180,9 @@ npm compile + + install + bower install @@ -326,7 +328,7 @@ org.apache.commons commons-collections4 - 4.0 + 4.1 commons-codec @@ -415,17 +417,17 @@ com.h2database h2 - 1.4.187 + 1.3.176 mysql mysql-connector-java - 5.1.35 + 5.1.37 org.postgresql postgresql - 9.4-1201-jdbc41 + 9.4-1205-jdbc42 net.sourceforge.jtds diff --git a/src/main/app/i18n/es.js b/src/main/app/i18n/es.js index 2f36fd97..993c9a11 100644 --- a/src/main/app/i18n/es.js +++ b/src/main/app/i18n/es.js @@ -7,24 +7,26 @@ "download" : "Descargar", "link" : "Enlace", "bookmark" : "Marcador", - "close" : "Close ", - "tags" : "Tags " + "close" : "Cerrar", + "tags" : "Etiquetas" }, "tree" : { - "subscribe" : "Subscribir", + "subscribe" : "Suscribirse", "import" : "Importar", "new_category" : "Nueva categoría", "all" : "Todos", - "starred" : "Destacado" + "starred" : "Destacados" }, "subscribe" : { - "feed_url" : "URL del Canal", - "feed_name" : "Nombre del Canal", + "feed_url" : "URL del canal", + "filtering_expression" : "Expresión de filtrado", + "filtering_expression_help" : "Si no está vacía, una expresión se evalúa como 'cierta' o 'falsa'. Si es falsa, las nueva entradas de este canal se marcarán como leídas automáticamente.\nLas variables disponibles son 'title' (título), 'content'(contenido), 'url' (URL), 'author' (autor), y 'categories' (categorías) y sus contenidos son convertidos a minúsculas para facilitar la comparación de strings (cadenas de texto).\nEjemplo: url.contains('youtube') or (author eq 'athou' and title.contains('github').\nLa sintaxis completa está disponible aquí.", + "feed_name" : "Nombre del canal", "category" : "Categoría" }, "import" : { - "google_reader_prefix" : "Déjame importar tus canales de tu", - "google_reader_suffix" : " cuenta.", + "google_reader_prefix" : "Déjame importar tus canales de tu cuenta ", + "google_reader_suffix" : ".", "google_download" : "También puedes subir tu archivo subscriptions.xml.", "google_download_link" : "Descárgalo de aquí.", "xml_file" : "Archivo OPML" @@ -34,147 +36,147 @@ "parent" : "Padre" }, "toolbar" : { - "unread" : "Sin Leer", + "unread" : "No leídos", "all" : "Todos", - "previous_entry" : "Entrada Anterior", - "next_entry" : "Próxima Entrada", + "previous_entry" : "Entrada anterior", + "next_entry" : "Entrada siguiente", "refresh" : "Atualizar", - "refresh_all" : "Force refresh all my feeds ", - "sort_by_asc_desc" : "Ordenar por fecha asc/desc", - "titles_only" : "Sólo Títulos", - "expanded_view" : "Vista Expandida", + "refresh_all" : "Forzar la actualización de todos mis canales.", + "sort_by_asc_desc" : "Ordenar por fecha asc/desc.", + "titles_only" : "Sólo títulos", + "expanded_view" : "Vista expandida", "mark_all_as_read" : "Marcar todos como leído", - "mark_all_older_12_hours" : "Items older than 12 hours ", - "mark_all_older_day" : "Artículos anteriores a un día", - "mark_all_older_week" : "Artículos más de una semana", - "mark_all_older_two_weeks" : "Artículos más de does semanas", + "mark_all_older_12_hours" : "Entradas anteriores a 12 horas.", + "mark_all_older_day" : "Entradas anteriores a un día.", + "mark_all_older_week" : "Entradas anteriores a una semana.", + "mark_all_older_two_weeks" : "Entradas anteriores a 2 semanas.", "settings" : "Ajustes", "profile" : "Perfil", "admin" : "Admin", - "about" : "Acerca de", + "about" : "Acerca de...", "logout" : "Cerrar sesión", "donate" : "Donar" }, "view" : { - "entry_source" : "from ", - "entry_author" : "by ", - "error_while_loading_feed" : "Error mientras se cargaba este canal", - "keep_unread" : "Guardar no leídos", - "no_unread_items" : "no tiene items sin leer.", - "mark_up_to_here" : "Mark as read up to here ", - "search_for" : "searching for: ", - "no_search_results" : "No match found for the requested keywords " + "entry_source" : "de ", + "entry_author" : "por ", + "error_while_loading_feed" : "Error mientras se cargaba este canal.", + "keep_unread" : "Mantener como no leído.", + "no_unread_items" : "no tiene entradas sin leer.", + "mark_up_to_here" : "Marcar como leídos hasta aquí.", + "search_for" : "buscando: ", + "no_search_results" : "No se han encontrado resultados para las palabras clave especificadas." }, "feedsearch" : { - "hint" : "Type in a subscription... ", - "help" : "Use the return key to select and arrow keys to navigate. ", - "result_prefix" : "Your subscriptions: " + "hint" : "Introduce una suscripción...", + "help" : "Usa la tecla Intro para seleccionar y las teclas de flecha para navegar.", + "result_prefix" : "Tus suscripciones:" }, "settings" : { "general" : { "value" : "General", - "language" : "Lenguaje", - "language_contribute" : "Contribuye con traducciones", + "language" : "Idioma", + "language_contribute" : "Contribuye con traducciones.", "show_unread" : "Mostrar canales y categorías sin entradas no leídas.", - "social_buttons" : "Mostrar botones de compartir de redes sociales.", - "scroll_marks" : "En vista expandida, el desplazamiento por las entradas las marca como leídas" + "social_buttons" : "Mostrar botones para compartir de redes sociales.", + "scroll_marks" : "En vista expandida, el desplazamiento por las entradas las marca como leídas." }, - "appearance" : "Appearance ", - "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ", - "scroll_speed_help" : "set to 0 to disable ", - "theme" : "Theme ", - "submit_your_theme" : "Submit your theme ", - "custom_css" : "CSS Personalizado" + "appearance" : "Apariencia", + "scroll_speed" : "Velocidad de desplazamiento al navegar entre entradas (en milisegundos)", + "scroll_speed_help" : "ponlo a 0 para desactivarlo", + "theme" : "Tema", + "submit_your_theme" : "Envía tu tema ", + "custom_css" : "CSS personalizado" }, "details" : { - "feed_details" : "Detalles de Canales", + "feed_details" : "Detalles del canal", "url" : "URL", - "website" : "Website ", + "website" : "Sitio web", "name" : "Nombre", "category" : "Categoría", - "position" : "Position ", + "position" : "Posicióon", "last_refresh" : "Última actualización", - "message" : "Last refresh message ", - "next_refresh" : "Next refresh ", - "queued_for_refresh" : "Queued for refresh ", - "feed_url" : "URL del Canal", - "generate_api_key_first" : "Genera una llave API en tu perfil primero.", - "unsubscribe" : "Terminar subscripción", - "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ", - "delete_category_confirmation" : "Are you sure you want to delete this category? ", + "message" : "Último mensaje de actualización", + "next_refresh" : "Próxima actualización", + "queued_for_refresh" : "En cola para actualizar", + "feed_url" : "URL del canal", + "generate_api_key_first" : "Genera una clave API en tu perfil primero.", + "unsubscribe" : "Terminar suscripción", + "unsubscribe_confirmation" : "¿Estás seguro de querer terminar tu suscripción a este canal?", + "delete_category_confirmation" : "¿Estás seguro de querer eliminar esta categoría?", "category_details" : "Detalles de la categoría", - "tag_details" : "Tag details ", + "tag_details" : "Detalles de las etiuqetas ", "parent_category" : "Categoría principal" }, "profile" : { "user_name" : "Nombre de usuario", - "email" : "Correo", + "email" : "Correo electrónico", "change_password" : "Cambiar contraseña", "confirm_password" : "Confirmar contraseña", "minimum_6_chars" : "Mínimo 6 caracteres", "passwords_do_not_match" : "Las contraseñas no coinciden", - "api_key" : "Llave API", + "api_key" : "Clave API", "api_key_not_generated" : "No generado todavía", - "generate_new_api_key" : "Generar nueva llave API", - "generate_new_api_key_info" : "Al cambiar la contraseña se generará una nueva llave API", + "generate_new_api_key" : "Generar nueva clave API", + "generate_new_api_key_info" : "Al cambiar la contraseña se generará una nueva clave API.", "opml_export" : "Exportación de OPML", "delete_account" : "Eliminar cuenta", - "delete_account_confirmation" : "Delete your acount? There's no turning back! " + "delete_account_confirmation" : "¿Eliminar tu cuenta? ¡No habrá vuelta atrás! " }, "about" : { "rest_api" : { "value" : "REST API", - "line1" : "CommaFeed está construido con el uso de JAX-RS y AngularJS. Por eso, un REST API esta disponible.", - "link_to_documentation" : "Vínculo de la documentación." + "line1" : "CommaFeed está construido sobre JAX-RS y AngularJS. Por lo tanto, una REST API está disponible.", + "link_to_documentation" : "Enlace a la documentación." }, "keyboard_shortcuts" : "Atajos de teclado", - "version" : "CommaFeed version ", - "line1_prefix" : "CommaFeed es un proyecto open-source. El código se encuentra en ", + "version" : "Versión de CommaFeed", + "line1_prefix" : "CommaFeed es un proyecto de código abierto. El código se encuentra en ", "line1_suffix" : ".", - "line2_prefix" : "Si encuentras un problema, por favor reportalo en la página de problemas de ", + "line2_prefix" : "Si encuentras un problema, por favor repórtalo en la página de problemas de ", "line2_suffix" : " del proyecto.", - "line3" : "Si te gusta este proyecto, por favor considera realizar una donacion para apoyar al desarrollador y ayudar a cubrir los costos de mantenimiento.", - "line4" : "For those of you who prefer bitcoin, here is the address ", + "line3" : "Si te gusta este proyecto, por favor considera realizar una donación para apoyar al desarrollador y ayudar a cubrir los costes de mantenimiento.", + "line4" : "Para aquellos de vosotros que prefieran bitcoin, aquí está la dirección ", "goodies" : { - "value" : "Goodies", - "android_app" : "Android app ", - "subscribe_url" : "Subscribe URL ", - "chrome_extension" : "Extensión de Chrome", - "firefox_extension" : "Extensión de Firefox", - "opera_extension" : "Opera extension ", - "subscribe_bookmarklet" : "Add subscription bookmarklet (click) ", - "subscribe_bookmarklet_asc" : "Oldest first ", - "subscribe_bookmarklet_desc" : "Newest first ", - "next_unread_bookmarklet" : "Next unread item bookmarklet (drag to bookmark bar) " + "value" : "Extras", + "android_app" : "Apps para Android", + "subscribe_url" : "URL para suscribirse ", + "chrome_extension" : "Extensión para Chrome.", + "firefox_extension" : "Extensión para Firefox.", + "opera_extension" : "Extensón para Opera.", + "subscribe_bookmarklet" : "Añadir marcador de suscripción (clic).", + "subscribe_bookmarklet_asc" : "Más antiguos primero", + "subscribe_bookmarklet_desc" : "Más recientes primero", + "next_unread_bookmarklet" : "Marcador a la siguiente entrada no leída (arástralo a la barra de marcadores) " }, "translation" : { "value" : "Traducción", "message" : "Necesitamos tu ayuda para ayudar a traducir CommaFeed.", - "link" : "Ver como contribuir con traducciones." + "link" : "Ver cómo contribuir con traducciones." }, "announcements" : "Anuncios", "shortcuts" : { - "mouse_middleclick" : "ratón botón medio", - "open_next_entry" : "abrir próxima entrada", - "open_previous_entry" : "abrir entrada previa", - "spacebar" : "space/shift+space ", - "move_page_down_up" : "moves the page down/up ", - "focus_next_entry" : "Establecer el foco en la próxima entrada sin abrirlo", - "focus_previous_entry" : "Establecer el foco en la entrada anterior sin abrirlo", - "open_next_feed" : "open next feed or category ", - "open_previous_feed" : "open previous feed or category ", - "open_close_current_entry" : "abrir/cerrar entrada actual", - "open_current_entry_in_new_window" : "abrir entrada actual en una nueva ventana", - "open_current_entry_in_new_window_background" : "open current entry in a new window in the background ", - "star_unstar" : "marcar/no marcar la entrada actual", - "mark_current_entry" : "marcar como leída/no la leída entrada actual", + "mouse_middleclick" : "click medio", + "open_next_entry" : "abrir la siguiente entrada", + "open_previous_entry" : "abrir la entrada anterior", + "spacebar" : "espacio/mayúsculas+espacio", + "move_page_down_up" : "mueve la página arriba/abajo", + "focus_next_entry" : "establecer el foco en la siguiente entrada sin abrirla", + "focus_previous_entry" : "establecer el foco en la entrada anterior sin abrirla", + "open_next_feed" : "abrir el siguiente canal o categoría", + "open_previous_feed" : "abrir el canal o categoría previo", + "open_close_current_entry" : "abrir/cerrar la entrada actual", + "open_current_entry_in_new_window" : "abrir la entrada actual en una nueva ventana", + "open_current_entry_in_new_window_background" : "abrir la entrada actual en una nueva ventana en segundo plano", + "star_unstar" : "destacar la entrada actual", + "mark_current_entry" : "marcar la entrada actual como leída/no la leída", "mark_all_as_read" : "marcar todas las entradas como leídas", "open_in_new_tab_mark_as_read" : "abrir entrada en una nueva pestaña y marcar como leída", - "fullscreen" : "toggle full screen mode ", - "font_size" : "increase/decrease font size of the current entry ", - "go_to_all" : "go to the All view ", - "go_to_starred" : "go to the Starred view ", - "feed_search" : "navigate to a subscription by entering the subscription name " + "fullscreen" : "activar/desactivar el modo pantalla completa ", + "font_size" : "aumentar/reducir el tamaño de la fuente de la entrada actual", + "go_to_all" : "ver Todos", + "go_to_starred" : "ver Destacados", + "feed_search" : "navega a una suscripción al introducir su nombre" } } -} \ No newline at end of file +} diff --git a/src/main/app/i18n/fr.js b/src/main/app/i18n/fr.js index 1cf37ffb..3e9174e7 100644 --- a/src/main/app/i18n/fr.js +++ b/src/main/app/i18n/fr.js @@ -34,24 +34,24 @@ "parent" : "Parent" }, "toolbar" : { - "unread" : "Non-lus", + "unread" : "Non lus", "all" : "Tous", "previous_entry" : "Article précédent", "next_entry" : "Article suivant", "refresh" : "Rafraîchir", - "refresh_all" : "Force refresh all my feeds ", + "refresh_all" : "Rafraîchir tous les flux", "sort_by_asc_desc" : "Trier par date croissante/décroissante", "titles_only" : "Titres uniquement", "expanded_view" : "Vue étendue", "mark_all_as_read" : "Tout marquer comme lu", - "mark_all_older_12_hours" : "Items older than 12 hours ", - "mark_all_older_day" : "Articles de plus d'un jour", + "mark_all_older_12_hours" : "Articles de plus de 12 heures", + "mark_all_older_day" : "Articles de plus d'une journée", "mark_all_older_week" : "Articles de plus d'une semaine", "mark_all_older_two_weeks" : "Articles de plus d'un mois", "settings" : "Préférences", "profile" : "Profil", "admin" : "Administration", - "about" : "A propos", + "about" : "À propos", "logout" : "Déconnexion", "donate" : "Faire un don" }, @@ -59,16 +59,16 @@ "entry_source" : "sur", "entry_author" : "par ", "error_while_loading_feed" : "Erreur durant le chargement de ce flux", - "keep_unread" : "Garder non-lu", - "no_unread_items" : "n'a pas d'articles non-lus.", + "keep_unread" : "Garder non lu", + "no_unread_items" : "n'a pas d'articles non lus.", "mark_up_to_here" : "Marquer comme lu jusqu'ici", - "search_for" : "searching for: ", - "no_search_results" : "No match found for the requested keywords " + "search_for" : "recherche : ", + "no_search_results" : "Pas de résultats avec le terme indiqué." }, "feedsearch" : { "hint" : "Tapez un nom de flux", "help" : "Utilisez la touche entrée pour sélectionner et les flèches pour naviguer", - "result_prefix" : "Vos flux:" + "result_prefix" : "Vos flux :" }, "settings" : { "general" : { @@ -76,12 +76,12 @@ "language" : "Langue", "language_contribute" : "Contribuer aux traductions", "show_unread" : "Afficher les flux et les catégories pour lesquels tout est déjà lu", - "social_buttons" : "Afficher les boutons de partage sur réseaux sociaux", - "scroll_marks" : "En mode de lecture étendu, marquer comme lu les éléments lorsque la fenêtre descend." + "social_buttons" : "Afficher les boutons de partage sur les réseaux sociaux", + "scroll_marks" : "En mode de lecture étendu, marquer les éléments comme lus lorsque la fenêtre descend." }, "appearance" : "Apparence", - "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ", - "scroll_speed_help" : "set to 0 to disable ", + "scroll_speed" : "Vitesse de défilement entre les entrées (en millisecondes) ", + "scroll_speed_help" : "Mettez 0 pour désactiver", "theme" : "Thème", "submit_your_theme" : "Soumettez votre thème.", "custom_css" : "CSS personnelle" @@ -94,16 +94,16 @@ "category" : "Catégorie", "position" : "Position", "last_refresh" : "Dernière mise à jour", - "message" : "Last refresh message ", + "message" : "Message de la dernière mise à jour ", "next_refresh" : "Prochaine mise à jour", "queued_for_refresh" : "En file d'attente", "feed_url" : "URL du flux", - "generate_api_key_first" : "Générez une clé API dans votre profil d'abord.", + "generate_api_key_first" : "Générez d'abord une clé API dans votre profil.", "unsubscribe" : "Se désabonner", - "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ", - "delete_category_confirmation" : "Are you sure you want to delete this category? ", + "unsubscribe_confirmation" : "Êtes-vous sûr de vouloir vous désabonner de de flux ? ", + "delete_category_confirmation" : "Êtes-vous sûr de vouloir supprimer cette catégorie ? ", "category_details" : "Détails de la catégorie", - "tag_details" : "Tag details ", + "tag_details" : "Détails du tag", "parent_category" : "Catégorie parente" }, "profile" : { @@ -116,15 +116,15 @@ "api_key" : "Clé API", "api_key_not_generated" : "Pas encore générée", "generate_new_api_key" : "Générer une nouvelle clé API", - "generate_new_api_key_info" : "Changer de mot de passe va générer une nouvelle clé API", + "generate_new_api_key_info" : "Changer de mot de passe générera une nouvelle clé API", "opml_export" : "Export du fichier OPML", "delete_account" : "Effacer le compte", - "delete_account_confirmation" : "Delete your acount? There's no turning back! " + "delete_account_confirmation" : "Êtes-vous sûr de vouloir supprimer définitivement votre compte ?" }, "about" : { "rest_api" : { "value" : "API REST", - "line1" : "CommaFeed utilise JAX-RS et AngularJS, donc une API REST est disponible.", + "line1" : "CommaFeed utilise JAX-RS et AngularJS, une API REST est donc disponible.", "link_to_documentation" : "Lien vers la documentation." }, "keyboard_shortcuts" : "Raccourcis clavier", @@ -145,7 +145,7 @@ "subscribe_bookmarklet" : "Bookmarklet d'ajout d'abonnement", "subscribe_bookmarklet_asc" : "Du plus ancien au plus récent", "subscribe_bookmarklet_desc" : "Du plus récent au plus ancien", - "next_unread_bookmarklet" : "Bookmarklet vers le prochain article non-lu" + "next_unread_bookmarklet" : "Bookmarklet vers le prochain article non lu" }, "translation" : { "value" : "Traduction", @@ -165,9 +165,9 @@ "open_previous_feed" : "Sélectionner le flux ou la catégorie précédente", "open_close_current_entry" : "Ouvrir/fermer l'article courant", "open_current_entry_in_new_window" : "Ouvrir l'article courant dans une nouvelle fenêtre", - "open_current_entry_in_new_window_background" : "Ouvrir l'article courant dans une nouvelle fenêtre en arrière plan", + "open_current_entry_in_new_window_background" : "Ouvrir l'article courant dans une nouvelle fenêtre en arrière-plan", "star_unstar" : "Ajouter/enlever l'article courant des favoris", - "mark_current_entry" : "Marquer comme lue/non-lue l'article courant", + "mark_current_entry" : "Marquer comme lu/non lu l'article courant", "mark_all_as_read" : "Marquer tous les articles comme lus", "open_in_new_tab_mark_as_read" : "Ouvrir l'article courant dans une nouvelle fenêtre et marquer comme lu", "fullscreen" : "Activer/désactiver le mode plein-écran", @@ -177,4 +177,4 @@ "feed_search" : "Naviguer vers un flux en entrant son nom" } } -} \ No newline at end of file +} diff --git a/src/main/app/i18n/id.js b/src/main/app/i18n/id.js new file mode 100644 index 00000000..6c48f96b --- /dev/null +++ b/src/main/app/i18n/id.js @@ -0,0 +1,182 @@ +{ + "global" : { + "save" : "Simpan", + "cancel" : "Batal", + "delete" : "Hapus", + "required" : "Diminta", + "download" : "Unduh", + "link" : "Tautan", + "bookmark" : "Penanda halaman buku", + "close" : "Tutup", + "tags" : "Penanda" + }, + "tree" : { + "subscribe" : "Berlangganan", + "import" : "Impor", + "new_category" : "Kategori Baru", + "all" : "Semua", + "starred" : "Diutamakan" + }, + "subscribe" : { + "feed_url" : "Umpan URL", + "feed_name" : "Nama Umpan", + "category" : "Kategori" + }, + "import" : { + "google_reader_prefix" : "Izinkan saya mengimpor umpan Anda dari kepunyaan Anda ", + "google_reader_suffix" : " akun.", + "google_download" : "Atau, unggah berkas subscriptions.xml Anda.", + "google_download_link" : "Unggah dari sini.", + "xml_file" : "Berkas OPML" + }, + "new_category" : { + "name" : "Nama", + "parent" : "Induk" + }, + "toolbar" : { + "unread" : "Belum dibaca", + "all" : "Semua", + "previous_entry" : "Catatan sebelumnya", + "next_entry" : "Catatan selanjutnya", + "refresh" : "Segarkan", + "refresh_all" : "Memaksa menyegarkan semua umpan saya", + "sort_by_asc_desc" : "Urutkan menurut tanggal asc/desc", + "titles_only" : "Hanya Judul", + "expanded_view" : "Penglihatan diperluas", + "mark_all_as_read" : "Tandai semua sebagai telah dibaca", + "mark_all_older_12_hours" : "Butir lebih lama 12 jam", + "mark_all_older_day" : "Butir lebih lama sehari", + "mark_all_older_week" : "Butir lebih lama seminggu", + "mark_all_older_two_weeks" : "Butir lebih lama dua minggu", + "settings" : "Pengaturan", + "profile" : "Profil", + "admin" : "Admin", + "about" : "Tentang", + "logout" : "Keluar", + "donate" : "Donasi" + }, + "view" : { + "entry_source" : "dari ", + "entry_author" : "oleh ", + "error_while_loading_feed" : "Galat saat memuat umpan ini", + "keep_unread" : "Tetapkan belum dibaca", + "no_unread_items" : "Tidak ada yang butir yang belum dibaca.", + "mark_up_to_here" : "Tandai sebagai dibaca di sini", + "search_for" : "mencari: ", + "no_search_results" : "Tidak ditemukan kata kunci yang sesuai dengan permintaan" + }, + "feedsearch" : { + "hint" : "Ketik sebuah langganan...", + "help" : "Gunakan tombol enter untuk memilih dan tombol panah untuk navigasi.", + "result_prefix" : "Langganan Anda:" + }, + "settings" : { + "general" : { + "value" : "Umum", + "language" : "Bahasa", + "language_contribute" : "Kontribusi dengan terjemahan", + "show_unread" : "Menampilkan umpan dan kategori tanpa catatan belum dibaca", + "social_buttons" : "Menampilkan tombol sosial berbagi", + "scroll_marks" : "Di penglihatan luas, menggulir melalui catatan menandakan sebagai telah dibaca" + }, + "appearance" : "Penampilan", + "scroll_speed" : "Kecepatan menggulir ketika menavigasi antar catatan (dalam milidetik)", + "scroll_speed_help" : "setel ke 0 untuk menonaktifkan", + "theme" : "Tema", + "submit_your_theme" : "Mengajukan tema Anda", + "custom_css" : "Ubah CSS" + }, + "details" : { + "feed_details" : "Rincian Umpan", + "url" : "URL", + "website" : "Situs", + "name" : "Nama", + "category" : "Kategori", + "position" : "Posisi", + "last_refresh" : "Penyegaran terakhir", + "message" : "Menyegarkan pesan terakhir", + "next_refresh" : "Penyegaran selanjutnya", + "queued_for_refresh" : "Antri untuk penyegaran", + "feed_url" : "Umpan URL", + "filtering_expression" : "Penyaring ekspresi", + "filtering_expression_help" : "Jika tidak kosong, sebuah ekspresi mengevaluasi ke 'benar' atau 'salah'. Jika salah, catatan baru untuk umpan ini akan ditandai sebagai telah dibaca secara otomatis. \nVariabel yang tersedia adalah 'judul', 'konten', 'url' 'penulis' dan 'kategori' dan konten mereka dikonversi dari huruf kecil ke perbandingan string yang mudah. \nContoh: url.contains('youtube') or (author eq 'athou' and title.contains('github'). \nSintaksis lengkap tersedia di here.", + "generate_api_key_first" : "Menghasilkan sebuah kunci API di profil Anda terlebih dahulu.", + "unsubscribe" : "Berhenti berlangganan", + "unsubscribe_confirmation" : "Apakah Anda yakin ingin berhenti berlangganan dari umpan ini?", + "delete_category_confirmation" : "Apakah Anda yakin ingin menghapus dari kategori ini?", + "category_details" : "rincian Kategori", + "tag_details" : "rincian Penanda", + "parent_category" : "kategori Induk" + }, + "profile" : { + "user_name" : "nama Pengguna", + "email" : "Surel", + "change_password" : "Ganti kata sandi", + "confirm_password" : "Konfirmasi kata sandi", + "minimum_6_chars" : "Minimal 6 karakter", + "passwords_do_not_match" : "Kata sandi tidak sesuai", + "api_key" : "kunci API", + "api_key_not_generated" : "Belum menghasilkan", + "generate_new_api_key" : "Hasilkan kunci API baru", + "generate_new_api_key_info" : "Mengganti kata sandi akan menghasilkan sebuah kunci API baru", + "opml_export" : "ekspor OPML", + "delete_account" : "Hapus akun", + "delete_account_confirmation" : "Hapus akun Anda? Hal ini tidak dapat dikembalikan!" + }, + "about" : { + "rest_api" : { + "value" : "REST API", + "line1" : "CommaFeed dibangun di atas JAX-RS dan AngularJS. Dengan demikian, tersedia sebuah REST API.", + "link_to_documentation" : "Tautan menuju dokumentasi." + }, + "keyboard_shortcuts" : "pintasan Papanketik", + "version" : "versi CommaFeed", + "line1_prefix" : "CommaFeed adalah suatu proyek open-source. Sumber di ", + "line1_suffix" : ".", + "line2_prefix" : "Jika Anda mengalami sebuah isu, silahkan laporkan pada halaman isu ", + "line2_suffix" : " proyek.", + "line3" : "Jika Anda menyukai proyek ini, silahkan mempertimbangkan suatu donasi untuk mendukung pengembang dan membantu menutupi biaya online situs ini.", + "line4" : "Untuk Anda yang lebih suka bitcoin, alamatnya di sini", + "goodies" : { + "value" : "Bingkisan", + "android_app" : "Android app", + "subscribe_url" : "URL Langganan", + "chrome_extension" : "ekstensi Chrome", + "firefox_extension" : "ekstensi Firefox", + "opera_extension" : "ekstensi Opera", + "subscribe_bookmarklet" : "Tambahkan bookmarklet langganan(klik)", + "subscribe_bookmarklet_asc" : "Terlama dahulu", + "subscribe_bookmarklet_desc" : "Terbaru dahulu", + "next_unread_bookmarklet" : "Butir bookmarklet selanjutnya yang belum dibaca (seret ke batang penanda halaman buku)" + }, + "translation" : { + "value" : "Terjemahan", + "message" : "Kami membutuhkan bantuan Anda untuk menterjemahkan CommaFeed.", + "link" : "Lihat bagaimana berkontribusi dengan terjemahan." + }, + "announcements" : "Pengumuman", + "shortcuts" : { + "mouse_middleclick" : "klik tengah tetikus", + "open_next_entry" : "buka catatan selanjutnya", + "open_previous_entry" : "buka catatan sebelumnya", + "spacebar" : "spasi/shift+spasi", + "move_page_down_up" : "pindah halaman bawah/atas", + "focus_next_entry" : "setel fokus pada catatan selanjutnya tanpa membukanya", + "focus_previous_entry" : "setel fokus pada catatan sebelumnya tanpa membukanya", + "open_next_feed" : "buka umpan atau kategori selanjutnya", + "open_previous_feed" : "buka umpan atau kategori sebelumnya", + "open_close_current_entry" : "buka/tutup catatan saat ini", + "open_current_entry_in_new_window" : "buka catatan saat ini di sebuah jendela baru", + "open_current_entry_in_new_window_background" : "buka catatan saat ini di sebuah jendela baru pada latar", + "star_unstar" : "tanda bintang/tidak catatan saat ini", + "mark_current_entry" : "tandai sebagai telah dibaca/belum catatan saat ini", + "mark_all_as_read" : "tandai semua catatan sebagai telah dibaca", + "open_in_new_tab_mark_as_read" : "buka catatan di tab baru dan tandai sebagai telah dibaca", + "fullscreen" : "beralih modus layar penuh", + "font_size" : "tingkatkan/turunkan ukuran huruf dari catatan saat ini", + "go_to_all" : "menuju ke lihat Semua", + "go_to_starred" : "menuju ke lihat Tanda Bintang", + "feed_search" : "navigasi ke langganan dengan memasukkan nama langganan" + } + } +} diff --git a/src/main/app/i18n/it.js b/src/main/app/i18n/it.js index f2760c91..f2ce64f1 100644 --- a/src/main/app/i18n/it.js +++ b/src/main/app/i18n/it.js @@ -1,33 +1,33 @@ { "global" : { "save" : "Salva", - "cancel" : "Cancella", + "cancel" : "Annulla", "delete" : "Elimina", "required" : "Richiesto", "download" : "Download", "link" : "Link", "bookmark" : "Segnalibro", "close" : "Chiudi", - "tags" : "Etichette " + "tags" : "Tag" }, "tree" : { - "subscribe" : "Abbonati", + "subscribe" : "Iscriviti", "import" : "Importa", "new_category" : "Nuova categoria", - "all" : "Tutto", + "all" : "Tutti", "starred" : "Preferiti" }, "subscribe" : { - "feed_url" : "Feed URL", + "feed_url" : "URL feed", "feed_name" : "Nome feed", "category" : "Categoria" }, "import" : { - "google_reader_prefix" : "Permettimi di importare i tuoi feed dal tuo ", - "google_reader_suffix" : " account.", - "google_download" : "Oppure, carica il tuo file subscriptions.xml.", - "google_download_link" : "Scaricalo da qui.", - "xml_file" : "OPML File" + "google_reader_prefix" : "Permettimi di importare i feed dal tuo account ", + "google_reader_suffix" : ".", + "google_download" : "Oppure carica il tuo file subscriptions.xml.", + "google_download_link" : "Puoi scaricalo da qui.", + "xml_file" : "File OPML" }, "new_category" : { "name" : "Nome", @@ -38,12 +38,12 @@ "all" : "Tutti", "previous_entry" : "Precedente", "next_entry" : "Successivo", - "refresh" : "Ricarica", - "refresh_all" : "Forza l'aggiornamento di tutte i miei feed", - "sort_by_asc_desc" : "Ordina per data ascendente/decrescente", + "refresh" : "Aggiorna", + "refresh_all" : "Forza l'aggiornamento di tutti i feed", + "sort_by_asc_desc" : "Ordina per data crescente/decrescente", "titles_only" : "Solo i titoli", "expanded_view" : "Espandi", - "mark_all_as_read" : "Segna tutto come già letto", + "mark_all_as_read" : "Segna tutti come già letti", "mark_all_older_12_hours" : "Elementi più vecchi di 12 ore", "mark_all_older_day" : "Elementi più vecchi di un giorno", "mark_all_older_week" : "Elementi più vecchi di una settimana", @@ -56,56 +56,56 @@ "donate" : "Dona" }, "view" : { - "entry_source" : "da ", - "entry_author" : "di ", - "error_while_loading_feed" : "Si è verificato un errore durante il caricamento di questo feed", - "keep_unread" : "Mantiene come non leggere", - "no_unread_items" : "Non ci sono elementi da leggere.", - "mark_up_to_here" : "Segna come letto fino qui", - "search_for" : "cercando: ", - "no_search_results" : "Nessun risultato trovato per le parole chiave cercate" + "entry_source" : "da", + "entry_author" : "di", + "error_while_loading_feed" : "Si è verificato un errore durante il caricamento del feed", + "keep_unread" : "Mantieni come da leggere", + "no_unread_items" : "non contiene elementi da leggere", + "mark_up_to_here" : "Segna come letto fin qui", + "search_for" : "Cerca: ", + "no_search_results" : "Nessun risultato per le parole chiave cercate" }, "feedsearch" : { - "hint" : "Digita in una sottoscrizione... ", - "help" : "Usa il tasto invio per selezionare e le frecce per navigare.", + "hint" : "Digita il nome di una sottoscrizione... ", + "help" : "Usa il tasto Invio per selezionare e le frecce per navigare.", "result_prefix" : "Le tue sottoscrizioni:" }, "settings" : { "general" : { "value" : "Generali", "language" : "Lingua", - "language_contribute" : "Contribuisci nelle traduzioni", - "show_unread" : "Mostra i feed e le categorie con elementi non letti", - "social_buttons" : "Mostra i pulsanti social network di condivisione", - "scroll_marks" : "In modalità estesa, segna come letto le voci quando scorri" + "language_contribute" : "Contribuisci alle traduzioni", + "show_unread" : "Mostra i feed e le categorie con voci non lette", + "social_buttons" : "Mostra i pulsanti di condivisione social", + "scroll_marks" : "In vista estesa, segna come lette le voci che scorri" }, "appearance" : "Aspetto", - "scroll_speed" : "Velocità dello scorrimento durante la navigazione tra i feed (in millisecondi) ", - "scroll_speed_help" : "Imposta 0 per disabilitare", + "scroll_speed" : "Velocità di scorrimento quando navighi tra i feed (in millisecondi)", + "scroll_speed_help" : "Imposta su 0 per disabilitare", "theme" : "Tema", - "submit_your_theme" : "Proponi il tuo tema", + "submit_your_theme" : "Sottoponi il tuo tema", "custom_css" : "CSS personalizzato" }, "details" : { "feed_details" : "Dettagli feed", - "url" : "URL ", - "website" : "Sito Web", + "url" : "URL", + "website" : "Sito web", "name" : "Nome", "category" : "Categoria", "position" : "Posizione", "last_refresh" : "Ultimo aggiornamento", "message" : "Ultimo messaggio di aggiornamento", "next_refresh" : "Prossimo aggiornamento", - "queued_for_refresh" : "In attesa per l'aggiornamento", - "feed_url" : "URL del feed ", - "filtering_expression" : "Espressione del filtro", - "filtering_expression_help" : "Se non è vuoto, una espressione viene misurata in 'true' o 'false'. Se falsa, i nuovi elementi di questo feed verranno segnati automaticamente come letti.\nLe variabili accettate sono 'title', 'content', 'url' 'author' e 'categories' e il loro contenuto è convertito in minuscolo per una facile confronto di stringhe.\Esempio: url.contains('youtube') o (author eq 'athou' and title.contains('github').\nLa sintassi completa è disponibile qui.", + "queued_for_refresh" : "In coda per l'aggiornamento", + "feed_url" : "URL feed", + "filtering_expression" : "Espressione filtro", + "filtering_expression_help" : "Quando non è vuota, l'espressione viene applicata a ogni nuovo elemento e valutata come 'vera' o 'falsa'. Se falsa, l'elemento verrà segnato automaticamente come letto.\nLe variabili accettate sono 'title' (titolo), 'content' (contenuto), 'url', 'author' (autore) e 'categories' (categorie); il loro contenuto è convertito in minuscolo per facilitarne il confronto.\nEsempio: url.contains('youtube') or (author eq 'athou' and title.contains('github')).\nLa sintassi completa è disponibile qui (in inglese).", "generate_api_key_first" : "Genera prima una chiave API nelle impostazioni del tuo profilo.", - "unsubscribe" : "Annulla la sottoscrizione", - "unsubscribe_confirmation" : "Sei sicuro di voler annullare la sottoscrizione da questo feed?", + "unsubscribe" : "Disiscriviti", + "unsubscribe_confirmation" : "Sei sicuro di voler annullare la sottoscrizione al feed?", "delete_category_confirmation" : "Sei sicuro di voler eliminare questa categoria?", "category_details" : "Dettagli categoria", - "tag_details" : "Dettagli etichette ", + "tag_details" : "Dettagli tag", "parent_category" : "Categoria principale" }, "profile" : { @@ -117,66 +117,66 @@ "passwords_do_not_match" : "Le password non corrispondono", "api_key" : "chiave API", "api_key_not_generated" : "Non ancora generata", - "generate_new_api_key" : "Genera una nuova chiave API ", - "generate_new_api_key_info" : "Cambiando la password sarà generata una nuova chiave API ì", + "generate_new_api_key" : "Genera una nuova chiave API", + "generate_new_api_key_info" : "Cambiando la password sarà generata una nuova chiave API", "opml_export" : "Esporta OPML", - "delete_account" : "Elimina il profilo", - "delete_account_confirmation" : "Eliminare il tuo profilo? Non si può tornare indietro!" + "delete_account" : "Elimina account", + "delete_account_confirmation" : "Vuoi eliminare il tuo account? Non si può tornare indietro!" }, "about" : { "rest_api" : { "value" : "REST API", - "line1" : "CommaFeed è costruito sopra JAX-RS e AngularJS. Ed ovviamente, una REST API è disponibile.", - "link_to_documentation" : "Collegamento alla documentazione." + "line1" : "CommaFeed è basato su JAX-RS e AngularJS. Pertanto è disponibile una REST API.", + "link_to_documentation" : "Link alla documentazione." }, "keyboard_shortcuts" : "Scorciatoie da tastiera", "version" : "Versione di CommaFeed", - "line1_prefix" : "CommaFeed è un progetto open source. I codici sono ospitati su ", + "line1_prefix" : "CommaFeed è un progetto open source. Trovi i sorgenti su ", "line1_suffix" : ".", - "line2_prefix" : "Se hai qualche problema, segnalalo sulla pagina del ", - "line2_suffix" : " progetto.", - "line3" : "Se ti piace il progetto, considera una donazione per supportare lo sviluppatore ed a aiutare per coprire i costi di mantenenimento di questo sito online.", - "line4" : "Se preferisci i Bitcoin, questo è l'indirizzo", + "line2_prefix" : "Se hai qualche problema, segnalalo sulla pagina del progetto ", + "line2_suffix" : ".", + "line3" : "Se ti piace questo progetto, considera una donazione per supportare lo sviluppatore e aiutare a coprire i costi di manutenzione di questo sito.", + "line4" : "Se preferisci Bitcoin, questo è l'indirizzo", "goodies" : { - "value" : "Goodies", + "value" : "Cose che potrebbero interessarti", "android_app" : "Applicazione Android", "subscribe_url" : "Sottoscrivi URL", "chrome_extension" : "Estensione per Chrome", "firefox_extension" : "Estensione per Firefox", "opera_extension" : "Estensione per Opera", "subscribe_bookmarklet" : "Aggiungi la sottoscrizione ai segnalibri (clicca)", - "subscribe_bookmarklet_asc" : "I più vecchi prima", - "subscribe_bookmarklet_desc" : "I più nuovi prima", - "next_unread_bookmarklet" : "Prossimo elemento non letto nei segnalibri (trascinali nella barra dei segnalibri)" + "subscribe_bookmarklet_asc" : "Prima i vecchi", + "subscribe_bookmarklet_desc" : "Prima i recenti", + "next_unread_bookmarklet" : "Bookmarklet al prossimo elemento da leggere (trascinalo nella barra dei segnalibri)" }, "translation" : { "value" : "Traduzioni", "message" : "Abbiamo bisogno del tuo aiuto per tradurre CommaFeed.", - "link" : "Vedi come aiutarci nella traduzioni." + "link" : "Scopri come aiutarci nella traduzioni." }, "announcements" : "Annunci", "shortcuts" : { "mouse_middleclick" : "click centrale del mouse", - "open_next_entry" : "apri l'elemento successivo", - "open_previous_entry" : "apri l'elemento precedente", - "spacebar" : "spazio/shift+spazio", - "move_page_down_up" : "muovi la pagina sopra/sotto", - "focus_next_entry" : "imposta il fuoco sull'elemento successivo senza aprirlo", - "focus_previous_entry" : "imposta il fuoco sull'elemento precedente senza aprirlo", - "open_next_feed" : "apri il feed successivo od una categoria", - "open_previous_feed" : "apri il feed precedente od una categoria", - "open_close_current_entry" : "apri/chiusi la categoria corrente", - "open_current_entry_in_new_window" : "apri il corrente elemento in una nuova finestra", - "open_current_entry_in_new_window_background" : "apri il corrente elemento in una nuova finestra in secondo piano", - "star_unstar" : "segna/togli il segno all'elemento corrente", - "mark_current_entry" : "segna come letto/non letto l'elemento corrente", - "mark_all_as_read" : "segna come letti tutti gli elementi", - "open_in_new_tab_mark_as_read" : "apri l'elemento in una nuova finestra e segnala come letta", - "fullscreen" : "alterna la modalità a schermo intero", - "font_size" : "aumenta/decrementa la grandezza del font dell'elemento corrente", - "go_to_all" : "vai nella visione totale", - "go_to_starred" : "vai nella visione dei preferiti", - "feed_search" : "naviga in una sottoscrizione scrivendo il suo nome" + "open_next_entry" : "apri successivo", + "open_previous_entry" : "apri precedente", + "spacebar" : "SPAZIO/MAIUSC+SPAZIO", + "move_page_down_up" : "muove la pagina in su/giù", + "focus_next_entry" : "metti a fuoco l'elemento successivo senza aprirlo", + "focus_previous_entry" : "metti a fuoco l'elemento precedente senza aprirlo", + "open_next_feed" : "apri il prossimo feed o categoria", + "open_previous_feed" : "apri il feed o la categoria precedente", + "open_close_current_entry" : "apri/chiudi la voce corrente", + "open_current_entry_in_new_window" : "apri la voce corrente in una nuova finestra", + "open_current_entry_in_new_window_background" : "apri la voce corrente in una nuova finestra in secondo piano", + "star_unstar" : "metti/togli la tua preferenza alla voce corrente", + "mark_current_entry" : "segna la voce corrente come letta/non letta", + "mark_all_as_read" : "segna tutte le voci come lette", + "open_in_new_tab_mark_as_read" : "apri voce in un nuovo tab e segna come letta", + "fullscreen" : "commuta la modalità a schermo intero", + "font_size" : "aumenta/decrementa la dimensione del font per la voce corrente", + "go_to_all" : "vai alla vista Tutti", + "go_to_starred" : "vai alla vista Preferiti", + "feed_search" : "raggiungi una sottoscrizione scrivendo il suo nome" } } } diff --git a/src/main/app/i18n/ko.js b/src/main/app/i18n/ko.js index a09ee65b..1de13ade 100644 --- a/src/main/app/i18n/ko.js +++ b/src/main/app/i18n/ko.js @@ -4,23 +4,23 @@ "cancel" : "취소", "delete" : "삭제", "required" : "필수", - "download" : "Download ", - "link" : "Link ", - "bookmark" : "Bookmark ", - "close" : "Close ", - "tags" : "Tags " + "download" : "다운로드", + "link" : "링크", + "bookmark" : "북마크", + "close" : "닫기 ", + "tags" : "태그 " }, "tree" : { "subscribe" : "구독", - "import" : "임포트", + "import" : "가져오기", "new_category" : "새로운 카테고리", "all" : "전체", - "starred" : "스타" + "starred" : "중요 표시됨" }, "subscribe" : { "feed_url" : "피드 URL", "feed_name" : "피드 이름", - "category" : "카테로기" + "category" : "카테고리" }, "import" : { "google_reader_prefix" : "당신의 Google Reader", @@ -31,23 +31,23 @@ }, "new_category" : { "name" : "이름", - "parent" : "카테고리 주소로 가기" + "parent" : "부모 카테고리" }, "toolbar" : { - "unread" : "안읽음", + "unread" : "읽지 않음", "all" : "전체", - "previous_entry" : "Previous entry ", - "next_entry" : "Next entry ", - "refresh" : "리프래쉬", - "refresh_all" : "Force refresh all my feeds ", - "sort_by_asc_desc" : "Sort by date asc/desc ", - "titles_only" : "Titles only ", - "expanded_view" : "Expanded view ", - "mark_all_as_read" : "읽음표시", - "mark_all_older_12_hours" : "Items older than 12 hours ", - "mark_all_older_day" : "Items older than a day ", - "mark_all_older_week" : "Items older than a week ", - "mark_all_older_two_weeks" : "Items older than two weeks ", + "previous_entry" : "이전 항목", + "next_entry" : "다음 항목", + "refresh" : "새로고침", + "refresh_all" : "모든 피드를 강제로 새로고침", + "sort_by_asc_desc" : "날짜별 오름차/내림차순 정렬", + "titles_only" : "제목만 표시하기", + "expanded_view" : "Expanded View", + "mark_all_as_read" : "읽음으로 표시", + "mark_all_older_12_hours" : "12시간보다 오래된 항목", + "mark_all_older_day" : "1일보다 오래된 항목", + "mark_all_older_week" : "1주일보다 오래된 항목", + "mark_all_older_two_weeks" : "2주일보다 오래된 항목", "settings" : "설정", "profile" : "프로필", "admin" : "괸리자", @@ -57,124 +57,124 @@ }, "view" : { "entry_source" : "from ", - "entry_author" : "by ", - "error_while_loading_feed" : "피드로딩중 에러", - "keep_unread" : "안읽은것 저장", - "no_unread_items" : " 읽지않은 항목이 없읍니다.", - "mark_up_to_here" : "Mark as read up to here ", - "search_for" : "searching for: ", - "no_search_results" : "No match found for the requested keywords " + "entry_author" : "by ", + "error_while_loading_feed" : "피드 로딩중 에러", + "keep_unread" : "항상 읽지 않음으로 표시", + "no_unread_items" : " 읽지 않은 항목이 없습니다.", + "mark_up_to_here" : "이 위로 읽음으로 표시", + "search_for" : "검색: ", + "no_search_results" : "검색 결과 없음" }, "feedsearch" : { - "hint" : "Type in a subscription... ", - "help" : "Use the return key to select and arrow keys to navigate. ", - "result_prefix" : "Your subscriptions: " + "hint" : "구독 이름을 입력하세요", + "help" : "화살표 키로 이동하고 엔터 키로 선택하세요.", + "result_prefix" : "검색 결과:" }, "settings" : { "general" : { "value" : "일반", - "language" : "일반 언어", - "language_contribute" : "번역 도움하기", - "show_unread" : "안읽은 항목들이 있는 피드와 카테고리 보여주기", - "social_buttons" : "소셜미디아 버튼들 보여주기", - "scroll_marks" : "Expanded View에서 스크롤하면 항목들을 읽음으로 저장하기" + "language" : "언어", + "language_contribute" : "번역에 기여하기", + "show_unread" : "안 읽은 항목들이 있는 피드와 카테고리 보여주기", + "social_buttons" : "공유 버튼 표시하기", + "scroll_marks" : "Expanded View에서 스크롤하면 항목들을 읽음으로 표시하기" }, - "appearance" : "Appearance ", - "scroll_speed" : "Scrolling speed when navigating between entries (in milliseconds) ", - "scroll_speed_help" : "set to 0 to disable ", - "theme" : "Theme ", - "submit_your_theme" : "Submit your theme ", - "custom_css" : "커스톰 CSS" + "appearance" : "외관", + "scroll_speed" : "항목 사이를 이동할 때 스크롤 속도 (밀리초로 설정)", + "scroll_speed_help" : "비활성화하려면 0으로 설정하세요", + "theme" : "테마", + "submit_your_theme" : "새 테마 업로드", + "custom_css" : "커스텀 CSS" }, "details" : { - "feed_details" : "피드 세부", - "url" : "유알엘", - "website" : "Website ", + "feed_details" : "피드 상세", + "url" : "URL", + "website" : "웹사이트", "name" : "이름", "category" : "카테고리", - "position" : "Position ", - "last_refresh" : "마지막 리프래쉬", - "message" : "Last refresh message ", - "next_refresh" : "Next refresh ", - "queued_for_refresh" : "Queued for refresh ", - "feed_url" : "피드 유알엘", + "position" : "위치", + "last_refresh" : "마지막 새로고침", + "message" : "마지막 새로고침 메시지", + "next_refresh" : "다음 새로고침", + "queued_for_refresh" : "새로고침 대기중", + "feed_url" : "피드 URL", "generate_api_key_first" : "당신의 프로필을 위해 API Key를 먼저 생성하세요.", - "unsubscribe" : "주소 삭제", - "unsubscribe_confirmation" : "Are you sure you want to unsubscribe from this feed? ", - "delete_category_confirmation" : "Are you sure you want to delete this category? ", - "category_details" : "카테고리 세부", - "tag_details" : "Tag details ", + "unsubscribe" : "구독 해제", + "unsubscribe_confirmation" : "정말 이 피드를 구독 해제하시겠습니까?", + "delete_category_confirmation" : "정말 이 카테고리를 삭제하시겠습니까?", + "category_details" : "카테고리 상세", + "tag_details" : "태그 상세", "parent_category" : "부모 카테고리" }, "profile" : { "user_name" : "사용자 이름", "email" : "이메일", - "change_password" : "비밀번호변경", - "confirm_password" : "비밀번호확인", - "minimum_6_chars" : "최소로 6자문자가 필요합니다.", + "change_password" : "비밀번호 변경", + "confirm_password" : "비밀번호 확인", + "minimum_6_chars" : "최소 6개의 문자가 필요합니다.", "passwords_do_not_match" : "비밀번호가 일치하지 않습니다.", "api_key" : "API key", "api_key_not_generated" : "아직 API Key가 생성되지 않았습니다.", "generate_new_api_key" : "API Key 생성하기", "generate_new_api_key_info" : "비밀번호를 변경하면 새로운 API Key가 생성됩니다.", - "opml_export" : "OPML export ", - "delete_account" : "프로필삭제", - "delete_account_confirmation" : "Delete your acount? There's no turning back! " + "opml_export" : "OPML 내보내기", + "delete_account" : "계정 삭제하기", + "delete_account_confirmation" : "계정을 삭제하시겠습니까? 되돌릴 수 없어요!" }, "about" : { "rest_api" : { "value" : "REST API", - "line1" : "CommaFeed는 JAX-RS하고 AngularJS를 이용해서 만들었습니다. 그렇기 때문에 REST API를 사용할수있습니다.", + "line1" : "CommaFeed는 JAX-RS와 AngularJS를 이용해 만들었습니다. 그렇기 때문에 REST API를 사용할수있습니다.", "link_to_documentation" : "문서 링크." }, - "keyboard_shortcuts" : "단축기", - "version" : "CommaFeed version ", - "line1_prefix" : "CommaFeed는 오픈 소스프로젝트입니다. 소스는", + "keyboard_shortcuts" : "단축키", + "version" : "CommaFeed 버전", + "line1_prefix" : "CommaFeed는 오픈 소스 프로젝트입니다. 소스는", "line1_suffix" : "에 있습니다.", "line2_prefix" : "문제가 발생하는 경우", - "line2_suffix" : " 프로젝트 문제페이지에 보고하십시요.", - "line3" : "이 프로젝트를 좋아하시면 개발자를 지원하고 웹사이트 유지용비를 충당하는 데 도움이되는 기부금을 고려하시기 바랍니다.", - "line4" : "For those of you who prefer bitcoin, here is the address ", + "line2_suffix" : " 프로젝트 문제 페이지에 보고하십시오.", + "line3" : "이 프로젝트를 좋아하시면 개발자를 지원하고 웹사이트 유지비용을 충당하는 데 도움이 되는 기부금을 고려하시기 바랍니다.", + "line4" : "비트코인으로 기부하기", "goodies" : { "value" : "Goodies", - "android_app" : "Android app ", - "subscribe_url" : "Subscribe URL ", - "chrome_extension" : "Chrome extension ", - "firefox_extension" : "Firefox extension ", - "opera_extension" : "Opera extension ", - "subscribe_bookmarklet" : "Add subscription bookmarklet (click) ", - "subscribe_bookmarklet_asc" : "Oldest first ", - "subscribe_bookmarklet_desc" : "Newest first ", - "next_unread_bookmarklet" : "Next unread item bookmarklet (drag to bookmark bar) " + "android_app" : "안드로이드 앱", + "subscribe_url" : "구독 URL", + "chrome_extension" : "Chrome 확장 프로그램", + "firefox_extension" : "Firefox 확장 기능", + "opera_extension" : "Opera 확장 기능", + "subscribe_bookmarklet" : "구독 북마크 추가 (클릭)", + "subscribe_bookmarklet_asc" : "오래된 것 먼저", + "subscribe_bookmarklet_desc" : "새로운 것 먼저", + "next_unread_bookmarklet" : "안 읽은 항목 북마크 (북마크바에 끌기) " }, "translation" : { "value" : "번역", - "message" : "CommaFeed를 번역할려면 당신의 도움이 필요합니다.", + "message" : "CommaFeed를 번역하는데 당신의 도움이 필요합니다.", "link" : "번역에 기여하기" }, "announcements" : "공지", "shortcuts" : { - "mouse_middleclick" : "마우시 미들클릭", + "mouse_middleclick" : "마우스 미들클릭", "open_next_entry" : "다음 항목 열기", "open_previous_entry" : "이전 항목 열기", "spacebar" : "space/shift+space ", - "move_page_down_up" : "moves the page down/up ", - "focus_next_entry" : "set focus on next entry without opening it ", - "focus_previous_entry" : "set focus on previous entry without opening it ", - "open_next_feed" : "open next feed or category ", - "open_previous_feed" : "open previous feed or category ", + "move_page_down_up" : "페이지 아래/위로 이동 ", + "focus_next_entry" : "열지 않고 다음 항목 보기", + "focus_previous_entry" : "열지 않고 이전 항목 보기", + "open_next_feed" : "다음 피드나 카테고리 열기", + "open_previous_feed" : "이전 피드나 카테고리 열기", "open_close_current_entry" : "현재 항목 열기/닫기", - "open_current_entry_in_new_window" : "새 창에서 현재 항목열기", - "open_current_entry_in_new_window_background" : "open current entry in a new window in the background ", - "star_unstar" : "현재 항목 스타/스타제거", + "open_current_entry_in_new_window" : "새 창으로 현재 항목 열기", + "open_current_entry_in_new_window_background" : "백그라운드에 새 창으로 현재 항목 열기", + "star_unstar" : "현재 항목 중요 표시/중요 표시 제거", "mark_current_entry" : "현재 항목 읽음/안읽음 표시", "mark_all_as_read" : "모든 항목 읽음으로 표시", "open_in_new_tab_mark_as_read" : "읽음으로 표시하고 새로운 탭에서 열기", - "fullscreen" : "toggle full screen mode ", - "font_size" : "increase/decrease font size of the current entry ", - "go_to_all" : "go to the All view ", - "go_to_starred" : "go to the Starred view ", - "feed_search" : "navigate to a subscription by entering the subscription name " + "fullscreen" : "전체화면 켜기/끄기", + "font_size" : "현재 항목의 글꼴 크기를 크게/작게", + "go_to_all" : "모든 항목 보기", + "go_to_starred" : "중요 표시한 항목 보기", + "feed_search" : "구독 이름으로 구독 찾기" } } -} \ No newline at end of file +} diff --git a/src/main/app/js/i18n.js b/src/main/app/js/i18n.js index b4dde06b..82c489cb 100644 --- a/src/main/app/js/i18n.js +++ b/src/main/app/js/i18n.js @@ -12,6 +12,7 @@ module.service('LangService', [function() { 'gl': 'Galician', 'glk': 'گیلکی', 'hu': 'Magyar', + 'id': 'Indonesian', 'ja': '日本語', 'ko': '한국어', 'nl': 'Nederlands', @@ -19,7 +20,7 @@ module.service('LangService', [function() { 'nn': 'Norsk (nynorsk)', 'pt': 'Português', 'pl': 'Polski', - 'ru': 'русский', + 'ru': 'Русский', 'fi': 'Suomi', 'sv': 'Svenska', 'zh': '简体中文', @@ -31,4 +32,4 @@ module.service('LangService', [function() { 'cs': 'Čeština', 'ms': 'Bahasa Malaysian' } -}]); \ No newline at end of file +}]); diff --git a/src/main/app/templates/_toolbar.html b/src/main/app/templates/_toolbar.html index d59c3d8f..aadf5800 100644 --- a/src/main/app/templates/_toolbar.html +++ b/src/main/app/templates/_toolbar.html @@ -6,14 +6,14 @@ -
+
-
+
@@ -28,7 +28,7 @@
-
+
@@ -57,7 +57,7 @@
-
+
-
+ -
+ -
+
@@ -133,4 +133,4 @@
-
\ No newline at end of file +
diff --git a/src/main/app/templates/feeds.view.html b/src/main/app/templates/feeds.view.html index 1f306f8e..b8e5b3f5 100644 --- a/src/main/app/templates/feeds.view.html +++ b/src/main/app/templates/feeds.view.html @@ -6,7 +6,7 @@ {{ 'tree.starred' | translate }} {{name}} - {{name}} + {{name}} » @@ -20,7 +20,7 @@
- + @@ -93,7 +93,7 @@ title="Gmail" popup ng-if="settingsService.settings.gmail"> - + { try { - Thread currentThread = Thread.currentThread(); - ClassLoader classLoader = currentThread.getContextClassLoader(); - ResourceAccessor accessor = new ClassLoaderResourceAccessor(classLoader); - - DataSource dataSource = getDataSource(sessionFactory); - connection = dataSource.getConnection(); JdbcConnection jdbcConnection = new JdbcConnection(connection); - Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(jdbcConnection); if (database instanceof PostgresDatabase) { @@ -73,17 +62,14 @@ public class StartupService implements Managed { database.setConnection(jdbcConnection); } + ResourceAccessor accessor = new ClassLoaderResourceAccessor(Thread.currentThread().getContextClassLoader()); Liquibase liq = new Liquibase("migrations.xml", accessor, database); liq.update("prod"); - } finally { - if (connection != null) { - connection.close(); - } + } catch (Exception e) { + throw new RuntimeException(e); } - - } catch (Exception e) { - throw new RuntimeException(e); - } + }); + session.close(); } private void initialData() { @@ -103,15 +89,4 @@ public class StartupService implements Managed { public void stop() throws Exception { } - - private static DataSource getDataSource(SessionFactory sessionFactory) { - if (sessionFactory instanceof SessionFactoryImpl) { - ConnectionProvider cp = ((SessionFactoryImpl) sessionFactory).getConnectionProvider(); - if (cp instanceof DatasourceConnectionProviderImpl) { - return ((DatasourceConnectionProviderImpl) cp).getDataSource(); - } - } - return null; - } - } diff --git a/src/main/java/com/commafeed/frontend/resource/UserREST.java b/src/main/java/com/commafeed/frontend/resource/UserREST.java index 85a62d97..6143bfca 100644 --- a/src/main/java/com/commafeed/frontend/resource/UserREST.java +++ b/src/main/java/com/commafeed/frontend/resource/UserREST.java @@ -208,6 +208,7 @@ public class UserREST { return Response.status(Status.FORBIDDEN).build(); } + user = userDAO.findById(user.getId()); user.setEmail(StringUtils.trimToNull(request.getEmail())); if (StringUtils.isNotBlank(request.getPassword())) { byte[] password = encryptionService.getEncryptedPassword(request.getPassword(), user.getSalt());