Merge branch 'release/0.9' 0.9
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 15 Jul 2015 19:19:20 +0000 (21:19 +0200)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Wed, 15 Jul 2015 19:19:20 +0000 (21:19 +0200)
pom.xml
src/main/java/net/pterodactylus/sone/core/UpdateChecker.java
src/main/java/net/pterodactylus/sone/main/SonePlugin.java
src/main/java/net/pterodactylus/sone/web/AboutPage.java
src/main/java/net/pterodactylus/sone/web/WebInterface.java
src/main/resources/i18n/sone.es.properties [new file with mode: 0644]
src/main/resources/i18n/sone.fr.properties
src/main/resources/i18n/sone.ja.properties
src/main/resources/i18n/sone.pl.properties
src/main/resources/templates/about.html
src/test/java/net/pterodactylus/sone/text/TextFilterTest.java [new file with mode: 0644]

diff --git a/pom.xml b/pom.xml
index 139d3c1..048b777 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -2,7 +2,7 @@
        <modelVersion>4.0.0</modelVersion>
        <groupId>net.pterodactylus</groupId>
        <artifactId>sone</artifactId>
-       <version>0.9-rc1</version>
+       <version>0.9</version>
        <dependencies>
                <dependency>
                        <groupId>net.pterodactylus</groupId>
index 85c5841..8114118 100644 (file)
@@ -50,12 +50,6 @@ public class UpdateChecker {
        /** The logger. */
        private static final Logger logger = getLogger("Sone.UpdateChecker");
 
-       /** The key of the Sone homepage. */
-       private static final String SONE_HOMEPAGE = "USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/";
-
-       /** The current latest known edition. */
-       private static final int LATEST_EDITION = 65;
-
        /** The event bus. */
        private final EventBus eventBus;
 
@@ -141,7 +135,7 @@ public class UpdateChecker {
         */
        public void start() {
                try {
-                       currentUri = new FreenetURI(SONE_HOMEPAGE + LATEST_EDITION);
+                       currentUri = new FreenetURI(SonePlugin.getHomepage());
                } catch (MalformedURLException mue1) {
                        /* this can not really happen unless I screw up. */
                        logger.log(Level.SEVERE, "Sone Homepage URI invalid!", mue1);
index 392cc40..c5620f6 100644 (file)
@@ -116,7 +116,12 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr
        }
 
        /** The version. */
-       public static final Version VERSION = new Version("rc1", 0, 9);
+       public static final Version VERSION = new Version(0, 9);
+
+       /** The current year at time of release. */
+       private static final int YEAR = 2015;
+       private static final String SONE_HOMEPAGE = "USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/";
+       private static final int LATEST_EDITION = 66;
 
        /** The logger. */
        private static final Logger logger = getLogger("Sone.Plugin");
@@ -170,6 +175,14 @@ public class SonePlugin implements FredPlugin, FredPluginFCP, FredPluginL10n, Fr
                return l10n;
        }
 
+       public static int getYear() {
+               return YEAR;
+       }
+
+       public static String getHomepage() {
+               return SONE_HOMEPAGE + LATEST_EDITION;
+       }
+
        //
        // FREDPLUGIN METHODS
        //
index 6a6bc63..4b54a4b 100644 (file)
@@ -29,35 +29,23 @@ import net.pterodactylus.util.version.Version;
  */
 public class AboutPage extends SoneTemplatePage {
 
-       /** The version to display. */
        private final Version version;
+       private final int year;
+       private final String homepage;
 
-       /**
-        * Creates a new “about” page.
-        *
-        * @param template
-        *            The template to render
-        * @param webInterface
-        *            The Sone web interface
-        * @param version
-        *            The version to display
-        */
-       public AboutPage(Template template, WebInterface webInterface, Version version) {
+       public AboutPage(Template template, WebInterface webInterface, Version version, int year, String homepage) {
                super("about.html", template, "Page.About.Title", webInterface, false);
                this.version = version;
+               this.year = year;
+               this.homepage = homepage;
        }
 
-       //
-       // TEMPLATEPAGE METHODS
-       //
-
-       /**
-        * {@inheritDoc}
-        */
        @Override
        protected void processTemplate(FreenetRequest request, TemplateContext templateContext) throws RedirectException {
                super.processTemplate(request, templateContext);
                templateContext.set("version", version);
+               templateContext.set("year", year);
+               templateContext.set("homepage", homepage);
        }
 
 }
index 9fe5bba..1ce8f8e 100644 (file)
@@ -692,7 +692,7 @@ public class WebInterface {
                pageToadlets.add(pageToadletFactory.createPageToadlet(new LogoutPage(emptyTemplate, this), "Logout"));
                pageToadlets.add(pageToadletFactory.createPageToadlet(new OptionsPage(optionsTemplate, this), "Options"));
                pageToadlets.add(pageToadletFactory.createPageToadlet(new RescuePage(rescueTemplate, this), "Rescue"));
-               pageToadlets.add(pageToadletFactory.createPageToadlet(new AboutPage(aboutTemplate, this, SonePlugin.VERSION), "About"));
+               pageToadlets.add(pageToadletFactory.createPageToadlet(new AboutPage(aboutTemplate, this, SonePlugin.VERSION, SonePlugin.getYear(), SonePlugin.getHomepage()), "About"));
                pageToadlets.add(pageToadletFactory.createPageToadlet(new SoneTemplatePage("noPermission.html", noPermissionTemplate, "Page.NoPermission.Title", this)));
                pageToadlets.add(pageToadletFactory.createPageToadlet(new SoneTemplatePage("emptyImageTitle.html", emptyImageTitleTemplate, "Page.EmptyImageTitle.Title", this)));
                pageToadlets.add(pageToadletFactory.createPageToadlet(new SoneTemplatePage("emptyAlbumTitle.html", emptyAlbumTitleTemplate, "Page.EmptyAlbumTitle.Title", this)));
diff --git a/src/main/resources/i18n/sone.es.properties b/src/main/resources/i18n/sone.es.properties
new file mode 100644 (file)
index 0000000..0c3eaec
--- /dev/null
@@ -0,0 +1,465 @@
+Navigation.Menu.Sone.Name=Sone
+Navigation.Menu.Sone.Tooltip=Plugin de red social para FreeNet
+Navigation.Menu.Sone.Item.Login.Name=Login
+Navigation.Menu.Sone.Item.Login.Tooltip=Entra en Sone
+Navigation.Menu.Sone.Item.Index.Name=Tu Sone
+Navigation.Menu.Sone.Item.Index.Tooltip=Muestra tu Sone
+Navigation.Menu.Sone.Item.New.Name=Nuevas publicaciones y respuestas
+Navigation.Menu.Sone.Item.New.Tooltip=Mostrar nuevas publicaciones y respuestas
+Navigation.Menu.Sone.Item.CreateSone.Name=Crear Sone
+Navigation.Menu.Sone.Item.CreateSone.Tooltip=Crear un nuevo Sone
+Navigation.Menu.Sone.Item.KnownSones.Name=Sones conocidos
+Navigation.Menu.Sone.Item.KnownSones.Tooltip=Mostrar todos los Sones conocidos
+Navigation.Menu.Sone.Item.Bookmarks.Name=Marcadores
+Navigation.Menu.Sone.Item.Bookmarks.Tooltip=Mostrar publicaciones marcadas
+Navigation.Menu.Sone.Item.EditProfile.Name=Editar perfil
+Navigation.Menu.Sone.Item.EditProfile.Tooltip=Editar el perfil de tu Sone
+Navigation.Menu.Sone.Item.ImageBrowser.Name=Imágenes
+Navigation.Menu.Sone.Item.ImageBrowser.Tooltip=Manejar tus imágenes
+Navigation.Menu.Sone.Item.DeleteSone.Name=Eliminar Sone
+Navigation.Menu.Sone.Item.DeleteSone.Tooltip=Eliminar el Sone actual
+Navigation.Menu.Sone.Item.Logout.Name=Logout
+Navigation.Menu.Sone.Item.Logout.Tooltip=Salir del Sone actual
+Navigation.Menu.Sone.Item.Options.Name=Opciones
+Navigation.Menu.Sone.Item.Options.Tooltip=Opciones para el plugin Sone
+Navigation.Menu.Sone.Item.Rescue.Name=Rescate
+Navigation.Menu.Sone.Item.Rescue.Tooltip=Rescatar Sone
+Navigation.Menu.Sone.Item.About.Name=Información
+Navigation.Menu.Sone.Item.About.Tooltip=Información sobre Sone
+
+Page.About.Title=Información - Sone
+Page.About.Page.Title=Información
+Page.About.Flattr.Description=Si te gusta Sone y te gustaría recompensarme, puedes usar el botón "Flattr" en el inferior de cada página. Flattr es un micropago no-anónimo que actua como un jarro de propinas donde la cantidad que cada usuario gasta es limitada (El mínimo es 2€ al mes). Puedes encontrar más información en {link}flattr.com{/link}.
+Page.About.Homepage.Title=Página de inicio
+Page.About.Homepage.Description=Puedes encontrar más información y el código fuente de Sone en la {link}página de inicio{/link}.
+Page.About.License.Title=Licencia
+
+Page.Options.Title=Opciones - Sone
+Page.Options.Page.Title=Opciones
+Page.Options.Page.Description=Estas opciones influencian en la ejecución del plugin de Sone
+Page.Options.Section.SoneSpecificOptions.Title=Opciones específicas de Sone
+Page.Options.Section.SoneSpecificOptions.NotLoggedIn=Estas opciones solo están disponibles si has {link}iniciado sesión{/link}.
+Page.Options.Section.SoneSpecificOptions.LoggedIn=Estas opciones solo están disponibles mientras hayas iniciado sesión y solo son válidas para el Sone con el que hayas hecho login.
+Page.Options.Option.AutoFollow.Description=Si un nuevo Sone es descubierto, seguirlo automáticamente. Ten en cuenta que esto solo se aplicará a los Sone que hayas descubierto tras activar esta opción!
+Page.Options.Option.EnableSoneInsertNotifications.Description=Si está activado, mostrará una notificación cada vez que tu Sone está siendo insertado o acaba de insertarse.
+Page.Options.Option.ShowNotificationNewSones.Description=Muestra notificaciones para nuevos Sone.
+Page.Options.Option.ShowNotificationNewPosts.Description=Muestra notificaciones para nuevas publicaciones.
+Page.Options.Option.ShowNotificationNewReplies.Description=Muestra notificaciones para nuevas respuestas.
+Page.Options.Section.AvatarOptions.Title=Opciones de avatar.
+Page.Options.Option.ShowAvatars.Description=Aquí puedes desactivar los avatares personalizados, dependiendo del criterio de selección. Si un avatar es desactivado para un Sone, se mostrará en su lugar el generado automáticamente.
+Page.Options.Option.ShowAvatars.Never.Description=Nunca mostrar avatares personalizados.
+Page.Options.Option.ShowAvatars.Followed.Description=Solo mostrar avatares de los Sone que sigues.
+Page.Options.Option.ShowAvatars.ManuallyTrusted.Description=Solo mostrar avatares de Sones a los que has asignado manualmente un valor de veracidad mayor que 0.
+Page.Options.Option.ShowAvatars.Trusted.Description=Solo mostrar avatares para Sones que tienen un valor de veracidad mayor que 0.
+Page.Options.Option.ShowAvatars.Always.Description=Mostrar siempre avatares customizados. Advertencia, algunos avatares pueden contener imágenes perturbadoras o ofensivas.
+Page.Options.Section.RuntimeOptions.Title=Comportamiento de la ejecución.
+Page.Options.Option.InsertionDelay.Description=Número de segundos que se esperarán para insertar el Sone tras una modificación.
+Page.Options.Option.PostsPerPage.Description=Número de publicaciones que se mostrarán en una página antes de que se muestren los controles de navegación.
+Page.Options.Option.ImagesPerPage.Description=Número de imágenes a mostrar en una página antes de que se muestren los controles de navegación.
+Page.Options.Option.CharactersPerPost.Description=Número de carácteres a mostrar de una publicación antes de acortarla y mostrar un link para expandirla (-1 para deshabilitar esta opción). La longitud de la acortación está determinada por la siguiente opción.
+Page.Options.Option.PostCutOffLength.Description=Número de carácteres que son mostrados si una publicación es demasiado larga (Mirar la opción anterior).Ignoralo si "Número de carácteres a mostrar" está desactivado (Valor en -1).
+Page.Options.Option.RequireFullAccess.Description=Denegar el acceso a Sone a cualquier host al que no se haya garantizado acceso completo.
+Page.Options.Section.TrustOptions.Title=Opciones de veracidad.
+Page.Options.Option.PositiveTrust.Description=Cantidad de veracidad positiva que quieres asignar a otros Sone al clicar en el tick tras una publicación o respuesta.
+Page.Options.Option.NegativeTrust.Description=Cantidad de veracidad que quieres asignar a otros Sone al clicar la X roja tras una publicación o respuesta. Este valor debería ser negativo.
+Page.Options.Option.TrustComment.Description=El comentario que se mostrara en la Web of Trust para cualquier veracidad que asignes desde Sone.
+Page.Options.Section.FcpOptions.Title=Opciones de la interfaz FCP
+Page.Options.Option.FcpInterfaceActive.Description=Activar la interfaz FCP para permitir a otros plugins y clientes remotos acceder al plugin de Sone.
+Page.Options.Option.FcpFullAccessRequired.Description=Requiere conexión FCP de los hosts permitidos (Comprueva tu {link}configuración del nodo, sección “FCP”{/link})
+Page.Options.Option.FcpFullAccessRequired.Value.No=No
+Page.Options.Option.FcpFullAccessRequired.Value.Writing=Para acceso de escritura
+Page.Options.Option.FcpFullAccessRequired.Value.Always=Siempre
+Page.Options.Section.Cleaning.Title=Limpiar
+Page.Options.Option.ClearOnNextRestart.Description=Reinicia la configuración del plugin Sone en el siguiente reinicio.Cuidado! {strong}Esto destruirá todos tus Sone{/strong} de modo que asegurate de que has hecho una copia de seguridad de todo lo que necesitas! También tendrás que asignar cierto a la siguiente opción para hacerlo.
+Page.Options.Option.ReallyClearOnNextRestart.Description=Esta opción tiene que ser puesta en "yes" si realmente, {strong}realmente{/strong} quieres limpiar la configuración del plugin en el siguiente reinicio.
+Page.Options.Warnings.ValueNotChanged=Esta opción no fue cambiada porque el valor que introdujiste no era válido.
+Page.Options.Button.Save=Save
+
+Page.Login.Title=Login - Sone
+Page.Login.Page.Title=Login
+Page.Login.Label.SelectSone=Sone seleccionado:
+Page.Login.Option.NoSone=Selecciona Sone…
+
+Page.Login.CreateSone.Title=Crear Sone
+
+Page.CreateSone.Title=Crear Sone - Sone
+
+Page.DeleteSone.Title=Eliminar Sone - Sone
+Page.DeleteSone.Page.Title=Eliminar Sone “{sone}”?
+Page.DeleteSone.Page.Description=Esto no eliminará el Sone de Freenet (Porque eso es imposible), simplemente lo desvinculará de tu identidad Web of Trust.
+Page.DeleteSone.Button.Yes=Si, eliminar.
+Page.DeleteSone.Button.No=No, no eliminar.
+
+Page.Index.Title=Tu Sone - Sone
+Page.Index.Label.Text=Publicar texto:
+Page.Index.Label.Sender=Mensajero:
+Page.Index.Button.Post=Publicar!
+Page.Index.PostList.Title=Publicar Feed
+Page.Index.PostList.Text.NoPostYet=Nadie ha escrito ningún post todavía. Probablemente deberías empezar ahora!
+Page.Index.PostList.Text.FollowSomeSones=O quizás no estás siguiendo ningún Sone? Echa un vistado a la lista de {link}Sones conocidos{/link} y sigue a quienes te parezcan interesantes
+Page.Index.PostList.Text.AutoFollowOption=También tienes la opción de seguir automáticamente cualquier Sone que descubras. Echa un vistado a las {link}opciones{/link} para activar la opción "Seguir automáticamente"!
+
+Page.New.Title=Nuevas publicaciones y respuestas - Sone
+Page.New.Page.Title=Nuevas publicaciones y respuestas.
+Page.New.NothingNew=Por el momento no hay nada nuevo.
+
+Page.KnownSones.Title=Sones conocidos - Sone
+Page.KnownSones.Page.Title=Sones conocidos
+Page.KnownSones.Text.NoKnownSones=Actualmente no hay Sones conocidos que cumplan con el filtro dado.
+Page.KnownSones.Label.Sort=Ordenar por:
+Page.KnownSones.Label.FilterSones=Filtrar Sones:
+Page.KnownSones.Sort.Field.Name=Nombre
+Page.KnownSones.Sort.Field.LastActivity=Última actividad
+Page.KnownSones.Sort.Field.Posts=Número de publicaciones
+Page.KnownSones.Sort.Field.Images=Número de imágenes
+Page.KnownSones.Sort.Order.Ascending=Ascendiente
+Page.KnownSones.Sort.Order.Descending=Descendiente
+Page.KnownSones.Filter.Followed=Mostrar solo Sones seguidos
+Page.KnownSones.Filter.NotFollowed=Ocultar Sones seguidos
+Page.KnownSones.Filter.New=Mostrar solo nuevos Sone
+Page.KnownSones.Filter.NotNew=Ocultar nuevos Sone
+Page.KnownSones.Filter.Own=Mostrar solo Sones locales
+Page.KnownSones.Filter.NotOwn=Mostrar solo Sones remotos
+Page.KnownSones.Button.Apply=Aplicar
+Page.KnownSones.Button.FollowAllSones=Seguir todos los Sones de esta página
+Page.KnownSones.Button.UnfollowAllSones=Dejar de seguir todos los Sone de esta página
+
+Page.EditProfile.Title=Editar perfil - Sone
+Page.EditProfile.Page.Title=Editar perfil
+Page.EditProfile.Page.Description=En esta página puedes entrar tus datos de perfil.
+Page.EditProfile.Page.Hint.Optionality=Y recuerda, cada casilla de este perfil es opcional! No se requiere que introduzcas nada aquí! También, todo lo que introduzcas aquí probablemente será almacenado en FreeNet durante mucho tiempo!
+Page.EditProfile.Label.FirstName=Primer nombre:
+Page.EditProfile.Label.MiddleName=Segundo nombre/s:
+Page.EditProfile.Label.LastName=Apellidos:
+Page.EditProfile.Birthday.Title=Cumpleaños
+Page.EditProfile.Birthday.Label.Day=Día:
+Page.EditProfile.Birthday.Label.Month=Mes:
+Page.EditProfile.Birthday.Label.Year=Año:
+Page.EditProfile.Avatar.Title=Avatar
+Page.EditProfile.Avatar.Description=Puedes seleccionar una de tus imágenes subidas para ser tu avatar. No debería ser mayor de 64x64 porque ese es el tamaño máximo mostrado a los demás (80×80 es usado para el cabezal de la página).
+Page.EditProfile.Avatar.Delete=Sin avatar
+Page.EditProfile.Fields.Title=Datos personalizados
+Page.EditProfile.Fields.Description=Aquí puedes entrar datos personalizados en tu perfil. Estas casillas pueden contenter lo que quieras en la extensión que quieras. Solo recuerda que, cuando pertoca a anonimato, menos es mejor que más.
+Page.EditProfile.Fields.Button.Edit=editar
+Page.EditProfile.Fields.Button.MoveUp=subir
+Page.EditProfile.Fields.Button.MoveDown=bajar
+Page.EditProfile.Fields.Button.Delete=eliminar
+Page.EditProfile.Fields.Button.ReallyDelete=en serio, eliminar
+Page.EditProfile.Fields.AddField.Title=Añadir campo
+Page.EditProfile.Fields.AddField.Label.Name=Nombre:
+Page.EditProfile.Fields.AddField.Button.AddField=Añadir campo
+Page.EditProfile.Button.Save=Guardar perfil
+Page.EditProfile.Error.DuplicateFieldName=El nombre del campo “{fieldName}” ya existe.
+
+Page.EditProfileField.Title=Editar campo del perfil - Sone
+Page.EditProfileField.Page.Title=Editar campo del perfil
+Page.EditProfileField.Text=Introduce un nuevo nombre para este campo.
+Page.EditProfileField.Error.DuplicateFieldName=El nombre que has entrado ya existe.
+Page.EditProfileField.Button.Save=Guardar
+Page.EditProfileField.Button.Reset=Volver al viejo nombre
+Page.EditProfileField.Button.Cancel=No cambiar el nombre
+
+Page.DeleteProfileField.Title=Eliminar campo del perfil - Sone
+Page.DeleteProfileField.Page.Title=Eliminar campo del perfil
+Page.DeleteProfileField.Text=Estás seguro de querer eliminar este campo?
+Page.DeleteProfileField.Button.Yes=Si, eliminar
+Page.DeleteProfileField.Button.No=No, no eliminar
+
+Page.CreatePost.Title=Publicar - Sone
+Page.CreatePost.Page.Title=Publicar
+Page.CreatePost.Label.Text=Publicar texto:
+Page.CreatePost.Button.Post=Publicar!
+Page.CreatePost.Error.EmptyText=No has escrito ningún texto, cosa que es una pena. Quizás tendrías que escribir más!
+
+Page.CreateReply.Title=Crear respuesta - Sone
+Page.CreateReply.Page.Title=Crear respuesta
+Page.CreateReply.Error.EmptyText=No has escrito ningún texto, cosa que es una pena. Quizás tendrías que escribir más!
+Page.CreateReply.Label.Text=Responder texto:
+Page.CreateReply.Button.Post=Publicar respuesta:
+
+Page.ViewSone.Title=Ver Sone - Sone
+Page.ViewSone.Page.TitleWithoutSone=Ver Sone desconocido
+Page.ViewSone.NoSone.Description=Actualmente no hay ningún Sone conocido con esta identidad {sone}. Si estás buscando por un Sone específico,asegurate de que es visible en tu Web of Trust:
+Page.ViewSone.UnknownSone.Description=Este Sone aún no ha sido recivido. Por favor, compruebalo de nuevo dentro de un rato.
+Page.ViewSone.UnknownSone.LinkToWebOfTrust=Incluso si el Sone sigue siendo desconocido, su perfil de Web of Trust podría estar disponible:
+Page.ViewSone.WriteAMessage=Puedes escribir un mensaje a este Sone aquí. Ten en cuenta que todo el mundo podrá leer este mensaje!
+Page.ViewSone.PostList.Title=Publicaciones de {sone}
+Page.ViewSone.PostList.Text.NoPostYet=Este Sone aún no ha publicado nada
+Page.ViewSone.Profile.Title=Perfil
+Page.ViewSone.Profile.Label.Name=Nombre
+Page.ViewSone.Profile.Label.Albums=Álbumes
+Page.ViewSone.Profile.Albums.Text.All=Todos los álbumes
+Page.ViewSone.Profile.Name.WoTLink=Perfil de Web of Trust
+Page.ViewSone.Replies.Title=Publicaciones a las que {sone} ha respondido
+
+Page.ViewPost.Title=Ver publicación - Sone
+Page.ViewPost.Page.Title=Ver publicaciones de {sone}
+Page.ViewPost.Page.TitleUnknownSone=Ver publicación desconocida
+Page.ViewPost.Text.UnknownPost=Este post aún no ha sido descargado
+
+Page.Like.Title=Like - Sone
+Page.Unlike.Title=Dislike - Sone
+
+Page.DeletePost.Title=Eliminar Sone - Sone
+Page.DeletePost.Page.Title=Eliminar Sone
+Page.DeletePost.Text.PostWillBeGone=Eliminar una publicación la quitará de tu Sone. No será eliminada de Freenet porque eso es imposible. Las viejas versiones de tu Sone siempre incluirán la publicación eliminada.
+Page.DeletePost.Button.Yes=Si, eliminar.
+Page.DeletePost.Button.No=No, no eliminar.
+
+Page.DeleteReply.Title=Eliminar respuesta - Sone
+Page.DeleteReply.Page.Title=Eliminar respuesta
+Page.DeleteReply.Text.PostWillBeGone=Eliminar una respuesta la eliminará de tu Sone. No será eliminada de Freenet porque eso es imposible. Las viejas versiones de tu Sone siempre incluirán la respuesta eliminada.
+Page.DeleteReply.Button.Yes=Si, eliminar.
+Page.DeleteReply.Button.No=No, no eliminar.
+
+Page.LockSone.Title=Bloquear Sone - Sone
+
+Page.UnlockSone.Title=Desbloquear Sone - Sone
+
+Page.FollowSone.Title=Seguir Sone - Sone
+
+Page.UnfollowSone.Title=Dejar de seguir Sone - Sone
+
+Page.ImageBrowser.Title=Navegador de imágenes - Sone
+Page.ImageBrowser.Album.Title=Álbum “{album}”
+Page.ImageBrowser.Album.Error.NotFound.Text=El álbum colicitado no pudo ser encontrado. Es posible que aún no haya sido descargado, o que haya sido eliminado.
+Page.ImageBrowser.Sone.Title=Álbumes de {sone}
+Page.ImageBrowser.Sone.Error.NotFound.Text=El Sone solicitado no pudo ser encontrado. Es posible que aún no haya sido descargado, o que haya sido eliminado.
+Page.ImageBrowser.Header.Albums=Álbumes
+Page.ImageBrowser.Header.Images=Imágenes
+Page.ImageBrowser.Link.All=Todos los Sone
+Page.ImageBrowser.CreateAlbum.Button.CreateAlbum=Crear álbum
+Page.ImageBrowser.Album.Edit.Title=Editar álbum
+Page.ImageBrowser.Album.Delete.Title=Eliminar álbum
+Page.ImageBrowser.Album.Label.AlbumImage=Imagen del álbum.
+Page.ImageBrowser.Album.Label.Title=Título:
+Page.ImageBrowser.Album.Label.Description=Descripción:
+Page.ImageBrowser.Album.AlbumImage.Choose=Elegir imagen del álbum
+Page.ImageBrowser.Album.Button.Save=Guardar álbum
+Page.ImageBrowser.Album.Button.Delete=Eliminar álbum
+Page.ImageBrowser.Image.Edit.Title=Editar imagen
+Page.ImageBrowser.Image.Title.Label=Título:
+Page.ImageBrowser.Image.Description.Label=Descripción:
+Page.ImageBrowser.Image.Button.MoveLeft=◀
+Page.ImageBrowser.Image.Button.Save=Guardar imagen
+Page.ImageBrowser.Image.Button.MoveRight=►
+Page.ImageBrowser.Image.Delete.Title=Eliminar imagen
+Page.ImageBrowser.Image.Button.Delete=Eliminar imagen
+
+Page.CreateAlbum.Title=Crear álbum - Sone
+Page.CreateAlbum.Page.Title=Crear álbum
+Page.CreateAlbum.Error.NameMissing=Parece que has olvidado introducir un nombre para tu nuevo álbum.
+
+Page.UploadImage.Title=Subir imagen - Sone
+Page.UploadImage.Error.InvalidImage=La imagen que intentabas subir no pudo ser reconocida. Por favor, sube solo imagenes en JPEG (*.jpg or *.jpeg) o PNG (*.png).
+
+Page.EditImage.Title=Editar imagen - Sone
+
+Page.DeleteImage.Title=Eliminar imagen - Sone
+Page.DeleteImage.Page.Title=Eliminar imagen
+Page.DeleteImage.Text.ImageWillBeGone=Esto eliminará la imagen “{image}” de tu álbum “{album}”. Si ya ha sido insertada en Freenet, no podrá ser eliminada de ahí a la fuerza. Quieres eliminar la imagen?
+Page.DeleteImage.Button.Yes=Si, eliminar imagen.
+Page.DeleteImage.Button.No=No, no eliminar imagen
+
+Page.EditAlbum.Title=Editar álbum - Sone
+
+Page.DeleteAlbum.Title=Eliminar álbum - Sone
+Page.DeleteAlbum.Page.Title=Eliminar álbum
+Page.DeleteAlbum.Text.AlbumWillBeGone=Esto eliminará tu álbum “{title}”. Realmente quieres hacer eso?
+Page.DeleteAlbum.Button.Yes=Si, eliminar álbum.
+Page.DeleteAlbum.Button.No=No, no eliminar álbum.
+
+Page.Trust.Title=Dar veracidad al Sone - Sone
+
+Page.Distrust.Title=Retirar veracidad al Sone - Sone
+
+Page.Untrust.Title=Quitar veracidad al Sone - Sone
+
+Page.MarkAsKnown.Title=Marcar como conocido - Sone
+
+Page.Bookmark.Title=Marcar - Sone
+Page.Unbookmark.Title=Eliminar marcador - Sone
+Page.Bookmarks.Title=Marcadores - Sone
+Page.Bookmarks.Page.Title=Marcadores
+Page.Bookmarks.Text.NoBookmarks=No tienes ningun marcador definido. Puedes marcar publicaciones clicando en la estrella bajo esta.
+Page.Bookmarks.Text.PostsNotLoaded=Algunas de tus publicaciones marcadas no han sido mostradas porque no se pueden cargar. Esto puede suceder si reiniciaste Sone recientemente o si el Sone original ha eliminado la publicación. Si estás razonablemente seguro de que las publicaciones ya no existen, puedes {link}desmarcarlas{/link}.
+
+Page.Search.Title=Buscar - Sone
+Page.Search.Page.Title=Buscar resultados
+Page.Search.Text.SoneHits=Los siguientes Sones coinciden con tus criterios de búsqueda.
+Page.Search.Text.PostHits=Las siguientes publicaciones coinciden con tus criterios de búsqueda.
+Page.Search.Text.NoHits=No hay Sones o publicaciones que coincidan con tus criterios de búsqueda.
+
+Page.Rescue.Title=Rescatar Sone - Sone
+Page.Rescue.Page.Title=Rescatar Sone “{0}”
+Page.Rescue.Text.Description=El modo rescate te permite restaurar versiones anteriores de tu Sone. Esto puede ser necesario si perdiste tu configuración.
+Page.Rescue.Text.Procedure=El modo rescate funciona obteniendo la última versión insertada de tu Sone. Si una edición fue obtenida con éxito, esta será cargada en tu Sone, dejandote controlar tus publicaciones, perfil y otras opciones (Puedes hacer eso en una segunda pestaña o ventana). Si la edición obtenida no es la que quieres rescatar,indica al modo rescate que obtenga la siguiente versión anterior.
+Page.Rescue.Text.Fetching=El modo rescate está obteniendo actualmente la edición {0} de tu Sone.
+Page.Rescue.Text.Fetched=El modo rescate ha descargado la edición {0} de tu Sone. Por favor, comprueba tus publicaciones, respuestas y perfil. Si te gusta lo que tiene el Sone actual, desbloquealo.
+Page.Rescue.Text.FetchedLast=El rescatador de Sone ha descargado la  última versión disponibe. Si no ha conseguido restaurar tu Sone probablemente no te queda suerte.
+Page.Rescue.Text.NotFetched=El rescatador de Sone no ha podido descargar la edición {0} de tu Sone. Por favor, vuelve ha intentarlo con la edición {0}, o prueba con la siguiente versión antigua.
+Page.Rescue.Label.NextEdition=Siguiente edición:
+Page.Rescue.Button.Fetch=Obtener edición
+
+Page.NoPermission.Title=Acceso desautorizado - Sone
+Page.NoPermission.Page.Title=Acceso desautorizado
+Page.NoPermission.Text.NoPermission=Has intentado hacer algo para lo que no tenías suficiente autorización. Por favor, abstente de dichas acciones en un futuro o nos veremos obligados a tomar contramedidas!
+
+Page.EmptyImageTitle.Title=El título no puede estar vacío - Sone
+Page.EmptyImageTitle.Page.Title=El título no puede estar vacío
+Page.EmptyImageTitle.Text.EmptyImageTitle=Tienes que darle a tu imagen un título. Por favor, vuelve a la página anterior y entra un título.
+
+Page.EmptyAlbumTitle.Title=El título no puede estar vacío - Sone
+Page.EmptyAlbumTitle.Page.Title=El título no puede estar vacío
+Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=Tienes que darle a tu álbum un título. Por favor, vuelve a la página anterior y entra un título.
+
+Page.DismissNotification.Title=Eliminar notificación - Sone
+
+Page.WotPluginMissing.Text.WotRequired=Debido a que Web of Trust es una parte integral de Sone, el plugin Web of Trust debe ser cargado para que Sone funcione.
+Page.WotPluginMissing.Text.LoadPlugin=Por favor, carga el plugin Web of Trust en el {link}gestor de plugins{/link}.
+
+Page.Logout.Title=Cerrar sesión - Sone
+
+Page.Invalid.Title=Acción invalida realizada - Sone
+Page.Invalid.Page.Title=Acción invalida realizada
+Page.Invalid.Text=Se ha realizado una acción inválida, o la acción era válida pero los parámetros no. Por favor, vuelve al {link}índice{/link} e intentalo de nuevo. Si el error persiste, probablemente hayas encontrado un bug.
+
+View.Search.Button.Search=Buscar
+
+View.CreateSone.Text.WotIdentityRequired=Para crear un Sone necesitas una identidad del {link} plugin Web of Trust{/link}.
+View.CreateSone.Select.Default=Selecciona una identidad
+View.CreateSone.Text.NoIdentities=No tienes ninguna identidad de Web of Trust. Por favor, ve al {link}plugin Web of Trust{/link} y crea una identidad.
+View.CreateSone.Text.NoNonSoneIdentities=No tienes ninguna identidad de Web of Trust que no tenga ya un Sone. Usa alguna de las identidades restantes para crear un nuevo Sone o ve al {link}plugin Web of Trust{/link} para crear una nueva identidad.
+View.CreateSone.Button.Create=Crear Sone
+View.CreateSone.Text.Error.NoIdentity=No has seleccionado ninguna identidad.
+
+View.Sone.Label.LastUpdate=Última actualización:
+View.Sone.Text.UnknownDate=desconocida
+View.Sone.Stats.Posts={0,number} {0,choice,0#publicaciones|1#publicación|1<publicaciones}
+View.Sone.Stats.Replies={0,number} {0,choice,0#respuestas|1#respuesta|1<respuestas}
+View.Sone.Stats.Images={0,number} {0,choice,0#imágenes|1#imagen|1<imágenes}
+View.Sone.Button.UnlockSone=desbloquear
+View.Sone.Button.UnlockSone.Tooltip=Permite a este Sone ser insertado ahora
+View.Sone.Button.LockSone=bloquear
+View.Sone.Button.LockSone.Tooltip=Impide que este Sone sea insertado ahora
+View.Sone.Button.UnfollowSone=dejar de seguir
+View.Sone.Button.FollowSone=seguir
+View.Sone.Status.Modified=Esto Sone fue modificado y espera para ser insertado.
+View.Sone.Status.Unknown=Este Sone aun no ha sido recivido.
+View.Sone.Status.Idle=Este Sone está desocupado, i.e. no está siendo descargado ni insertado.
+View.Sone.Status.Downloading=Este Sone está siendo descargado.
+View.Sone.Status.Inserting=Este Sone está siendo insertado.
+
+View.SoneMenu.Link.AllAlbums=todos los albumes
+
+View.Post.UnknownAuthor=(desconocido)
+View.Post.WebOfTrustLink=perfil de web of trust
+View.Post.Permalink=link a la publicación
+View.Post.PermalinkAuthor=link al autor
+View.Post.Bookmarks.PostIsBookmarked=La publicación esta marcada, clica para eliminarla de los marcadores
+View.Post.Bookmarks.PostIsNotBookmarked=La publicación no esta marcada, clica para marcarla
+View.Post.DeleteLink=Eliminar
+View.Post.SendReply=Publicar respuesta!
+View.Post.Reply.DeleteLink=Eliminar
+View.Post.LikeLink=Like
+View.Post.UnlikeLink=Dislike
+View.Post.ShowSource=Habilitar/Deshabilitar Parser
+View.Post.NotDownloaded=Esta publicación aun no ha sido descargada, o ha sido eliminada.
+View.Post.ShowMore=mostrar más
+View.Post.ShowLess=mostrar menos
+
+View.UpdateStatus.Text.ChooseSenderIdentity=Elegir la identidad del emisario
+
+View.Trust.Tooltip.Trust=Creer a esta persona
+View.Trust.Tooltip.Distrust=Asignar veracidad negativa a esta persona
+View.Trust.Tooltip.Untrust=Eliminar la veracidad asignada a esta persona
+
+View.CreateAlbum.Title=Crear Álbum
+View.CreateAlbum.Label.Name=Nombre:
+View.CreateAlbum.Label.Description=Descripción:
+
+View.UploadImage.Title=Subir Imagen
+View.UploadImage.Label.Title=Título:
+View.UploadImage.Label.Description=Descripción:
+View.UploadImage.Button.UploadImage=Subir Imagen
+
+View.Time.InTheFuture=en el futuro
+View.Time.AFewSecondsAgo=hace unos segundos
+View.Time.HalfAMinuteAgo=hace medio minuto
+View.Time.AMinuteAgo=hace un minuto
+View.Time.XMinutesAgo=hace ${min} minutos
+View.Time.HalfAnHourAgo=hace media hora
+View.Time.AnHourAgo=hace una hora
+View.Time.XHoursAgo=hace ${hour} horas
+View.Time.ADayAgo=hace un día
+View.Time.XDaysAgo=hace ${day} días
+View.Time.AWeekAgo=hace una semana
+View.Time.XWeeksAgo=hace ${week} semanas
+View.Time.AMonthAgo=hace un mes
+View.Time.XMonthsAgo=hace ${month} meses
+View.Time.AYearAgo=hace un año
+View.Time.XYearsAgo=hace ${year} años
+
+WebInterface.DefaultText.StatusUpdate=Qué estás pensando?
+WebInterface.DefaultText.Message=Escrivir un mensaje…
+WebInterface.DefaultText.Reply=Escrivir una respuesta…
+WebInterface.DefaultText.FirstName=Primer nombre
+WebInterface.DefaultText.MiddleName=Segundo nombre
+WebInterface.DefaultText.LastName=Apellido
+WebInterface.DefaultText.BirthDay=Día
+WebInterface.DefaultText.BirthMonth=Mes
+WebInterface.DefaultText.BirthYear=Año
+WebInterface.DefaultText.FieldName=Nombre del campo
+WebInterface.DefaultText.Option.InsertionDelay=Tiempo a esperar tras la modificación de un Sone antes de insertarlo (en segundos)
+WebInterface.DefaultText.Search=Qué estás buscando?
+WebInterface.DefaultText.CreateAlbum.Name=Título del álbum
+WebInterface.DefaultText.CreateAlbum.Description=Descripción del álbum
+WebInterface.DefaultText.EditAlbum.Title=Título del álbum
+WebInterface.DefaultText.EditAlbum.Description=Descripción del álbum
+WebInterface.DefaultText.UploadImage.Title=Título de la imagen
+WebInterface.DefaultText.UploadImage.Description=Descripción de la imagen
+WebInterface.DefaultText.EditImage.Title=Título de la imagen
+WebInterface.DefaultText.EditImage.Description=Descripción de la imagen
+WebInterface.DefaultText.Option.PostsPerPage=Número de publicaciones a mostrar en una página
+WebInterface.DefaultText.Option.ImagesPerPage=Número de imágenes a mostrar en una página
+WebInterface.DefaultText.Option.CharactersPerPost=Número de carácteres de una publicación antes de acortarla
+WebInterface.DefaultText.Option.PostCutOffLength=Número de carácteres de los fragmentos de la publicación acortada
+WebInterface.DefaultText.Option.PositiveTrust=Veracidad positiva a asignar
+WebInterface.DefaultText.Option.NegativeTrust=Veracidad negativa a asignar
+WebInterface.DefaultText.Option.TrustComment=Comentario a poner en Web of Trust
+WebInterface.Button.Comment=Comentar
+WebInterface.Confirmation.DeletePostButton=Si, eliminar!
+WebInterface.Confirmation.DeleteReplyButton=Si, eliminar!
+WebInterface.SelectBox.Choose=Elegir…
+WebInterface.SelectBox.Yes=Si
+WebInterface.SelectBox.No=No
+WebInterface.ClickToShow.Replies=Clica aquía para mostrar las respuestas ocultas.
+WebInterface.VersionInformation.CurrentVersion=Versión actual:
+WebInterface.VersionInformation.LatestVersion=Última versión:
+WebInterface.VersionInformation.Homepage=Página de inicio
+
+Notification.ClickHereToRead=Clica aquí para leer el texto completo de la notificación.
+Notification.FirstStart.Text=Parece ser la primera vez que inicias Sone. Para empezar, crea un nuevo Sone de una identidad de Web of Trust y empieza a seguir a otros Sones.
+Notification.Startup.Text=Sone se está iniciando. Puede llevar un tiempo obtener todas las identidades y Sones de Web of Trust. Si echas en falta algunas cosas,por favor, se paciente, probablemente aparezcan pronto.
+Notification.ConfigNotRead.Text=El fichero de configuración "sone.properties" no puede ser cargado, probablemente porque no se guardó correctamente. Esto puede suceder en versiones anteriores a Sone 0.3.3 y no hay nada que puedas hacer al respecto.
+Notification.Button.Dismiss=Desechar
+Notification.NewSone.ShortText=Se han descubierto nuevos Sones:
+Notification.NewSone.Text=Se han descubierto nuevos Sones:
+Notification.NewPost.ShortText=Se han descubierto nuevas publicaciones.
+Notification.NewPost.Text=Se han descubierto nuevas publicaciones para los siguientes Sones:
+Notification.NewPost.Button.MarkRead=Marcar como leído
+Notification.NewReply.ShortText=Se han descubierto nuevas respuestas.
+Notification.NewReply.Text=Se han descubierto nuevas respuestas para publicaciones de los siguientes Sones:
+Notification.SoneIsBeingRescued.Text=Los siguientes Sone están siendo rescatados:
+Notification.SoneRescued.Text=Los siguientes Sone han sido rescatados:
+Notification.SoneRescued.Text.RememberToUnlock=Por favor, recuerda controlar las publicaciones y respuestas que has dado y no olvides desbloquear tus Sones!
+Notification.LockedSones.Text=Los siguientes Sone han estado bloqueados durante más de 5 minutos. Por favor, comprueva si realmente quieres mantenerlos bloqueados:
+Notification.NewVersion.Text=La versión {version} del plugin Sone fue encontrada. Descargala de USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}​!
+Notification.InsertingImages.Text=Las siguientes imágenes están siendo insertadas:
+Notification.InsertedImages.Text=Las siguientes imágenes han sido insertadas:
+Notification.ImageInsertFailed.Text=Las siguientes imágenes no han podido ser insertadas:
+Notification.Mention.ShortText=Has sido mencionado.
+Notification.Mention.Text=Has sido mencionado en las siguientes publicaciones:
+Notification.SoneIsInserting.Text=Tu Sone sone://{0} está siendo insertado.
+Notification.SoneIsInserted.Text=Tu Sone sone://{0} ha sido insertado en {1,number} {1,choice,0#segundos|1#segundo|1<segundos}.
+Notification.SoneInsertAborted.Text=Tu Sone sone://{0} no pudo ser insertado.
index ac8fa69..df6f1ed 100644 (file)
@@ -40,8 +40,8 @@ Page.Options.Page.Description=Ces options influencent le comportement de l'exéc
 Page.Options.Section.SoneSpecificOptions.Title=Options spécifiques à Sone
 Page.Options.Section.SoneSpecificOptions.NotLoggedIn=Ces options sont uniquement disponibles si vous êtes {link}connecté{/link}.
 Page.Options.Section.SoneSpecificOptions.LoggedIn=Ces options sont uniquement disponibles pour le Sone actif.
-Page.Options.Option.AutoFollow.Description=si un nouveau Sone est découvert, automatiquement le suivre. Veuillez noter que cela suivra uniquement les Sones qui seront découverts après que cette option soit activée!
-Page.Options.Option.EnableSoneInsertNotifications.Description=Si cette option est activée, Sone affichera les notifications chaque fois que vous insèrerez un message ou qu'il sera correctement inséré.
+Page.Options.Option.AutoFollow.Description=si un nouveau Sone est découvert, automatiquement le suivre. Veuillez noter que cela suivra uniquement les Sones qui seront découverts après activation de cette option!
+Page.Options.Option.EnableSoneInsertNotifications.Description=Si cette option est activée, Sone affichera les notifications chaque fois que vous insérerez un message ou qu'il sera correctement inséré.
 Page.Options.Option.ShowNotificationNewSones.Description=Affiche les notifications des nouveaux Sones.
 Page.Options.Option.ShowNotificationNewPosts.Description=Affiche une notification lors d'un nouveau message.
 Page.Options.Option.ShowNotificationNewReplies.Description=Affiche une notification lors d'une nouvelle réponse.
@@ -49,22 +49,22 @@ Page.Options.Section.AvatarOptions.Title=Options de votre Avatar.
 Page.Options.Option.ShowAvatars.Description=Vous pouvez désactiver votre avatar personnalisé ici, selon le critère sélectionné. L'avatar par défaut sera activé si vous déactivez le votre.
 Page.Options.Option.ShowAvatars.Never.Description=Ne jamais montrer les avatar personnalisés
 Page.Options.Option.ShowAvatars.Followed.Description=Ne montrer que les avatars des Sones que vous suivez
-Page.Options.Option.ShowAvatars.ManuallyTrusted.Description=Ne montrer que les avatars des Sones auxquelles que vous avez assigné manuellement une confiance superieure à 0.
+Page.Options.Option.ShowAvatars.ManuallyTrusted.Description=Ne montrer que les avatars des Sones auxquelles vous êtes assignés manuellement une confiance superieure à 0.
 Page.Options.Option.ShowAvatars.Trusted.Description=Ne montrer que les avatars des Sones qui ont une confiance superieure à 0.
-Page.Options.Option.ShowAvatars.Always.Description=Montre tout le temps les avatars personnalisés.Attention: certains avatars peuvent être offensants !
+Page.Options.Option.ShowAvatars.Always.Description=Montre tout le temps les avatars personnalisés. Attention: certains avatars peuvent être offensants !
 Page.Options.Section.RuntimeOptions.Title=Comportement runtime
-Page.Options.Option.InsertionDelay.Description=Le nombre de secondes que l'inserteur de Sone attends après une modification d'un Sone avant qu'elle soit insérée.
+Page.Options.Option.InsertionDelay.Description=Le délai d'insertion d'un Sone.
 Page.Options.Option.PostsPerPage.Description=Le nombre de message à afficher par page avant que les boutons de pagination soit affichés.
 Page.Options.Option.ImagesPerPage.Description=Le nombre de message à afficher par page avant que les boutons de pagination soit affichés.
-Page.Options.Option.CharactersPerPost.Description=Le nombre de caractères à afficher par message avant que le lien proposant de voir l'intégralité ne soit proposé (-1 pour désactiver). La taille du composant est determinée par l'option ci-desssous.
-Page.Options.Option.PostCutOffLength.Description=Le nombre de charactère à afficher avant que le message ne soit considéré comme trop long. (voir option du dessus)
+Page.Options.Option.CharactersPerPost.Description=Le nombre de caractères à afficher par message avant que le lien proposant de voir l'intégralité ne soit proposé (-1 pour désactiver). La taille du composant est déterminée par l'option ci-dessous.
+Page.Options.Option.PostCutOffLength.Description=Le nombre de caractères à afficher si le message est considéré comme trop long (voir option du dessus). Ignoré si "nombre de caractères à afficher" est désactivé (configuré à -1).
 Page.Options.Option.RequireFullAccess.Description=Pour refuser l'accès à Sone à tout hôte à qui un accès complet n'a pas été accordé.
 Page.Options.Section.TrustOptions.Title=Réglages de confiance
 Page.Options.Option.PositiveTrust.Description=La quantité de note de confiance positive que vous voulez assigner à d'autres Sones en cochant la case en dessous d'un message ou d'une réponse.
-Page.Options.Option.NegativeTrust.Description=La quantité de note de confiance que vous voulez assigner à d'autres Sones en cliquand le X rouge en dessous d'un message ou d'une réponse. Cette valeur devrait être négative.
+Page.Options.Option.NegativeTrust.Description=La quantité de note de confiance que vous voulez assigner à d'autres Sones en cliquant le X rouge en dessous d'un message ou d'une réponse. Cette valeur devrait être négative.
 Page.Options.Option.TrustComment.Description=Le commentaire qui sera mis dans le web of trust pour chaque note de confiance que vous assignez de Sone.
 Page.Options.Section.FcpOptions.Title=Réglages de l'Interface FCP
-Page.Options.Option.FcpInterfaceActive.Description=Activer l'interface FCP afin de permettre à d'autres plugins et clients à distance d'accéder votre plugin Sone.
+Page.Options.Option.FcpInterfaceActive.Description=Activer l'interface FCP afin de permettre à d'autres plugins et clients à distance d'accéder à votre plugin Sone.
 Page.Options.Option.FcpFullAccessRequired.Description=Requière une connexion FCP d'hôtes autorisés (Veuillez voir votre {link}configuration du noeud, section “FCP”{/link})
 Page.Options.Option.FcpFullAccessRequired.Value.No=Non
 Page.Options.Option.FcpFullAccessRequired.Value.Writing=Pour accès à l'écriture
@@ -97,7 +97,7 @@ Page.Index.Button.Post=Envoyer!
 Page.Index.PostList.Title=Envoyer du contenu
 Page.Index.PostList.Text.NoPostYet=Personne n'a encore écrit de message. vous devriez probablement commencer maintenant!
 Page.Index.PostList.Text.FollowSomeSones=Peut-être ne suivez vous pas encore de Sones? Jetez un oeil à la liste des {link}Sones connus{/link} et suivez ceux qui pourrait vous intéresser!
-Page.Index.PostList.Text.AutoFollowOption=You also have the option of automatically following newly discovered Sones. Take a look at the {link}options{/link} to activate the auto-follow feature!
+Page.Index.PostList.Text.AutoFollowOption=Vous avez comme option la possibilité de suivre les nouveaux Sones découverts. Jetez un oeil à la liste des {link}options{/link} pour suivre ceux qui pourrait vous intéresser!
 
 Page.New.Title=Nouveaux messages et réponses - Sone
 Page.New.Page.Title=Nouveaux messages et réponses
@@ -136,10 +136,10 @@ Page.EditProfile.Birthday.Label.Day=Jour:
 Page.EditProfile.Birthday.Label.Month=Mois:
 Page.EditProfile.Birthday.Label.Year=Année:
 Page.EditProfile.Avatar.Title=Avatar
-Page.EditProfile.Avatar.Description=Vous pouvez selectionner une de vos images comme avatar. Elle ne doit pas dépasser la taille de 64x64 pixels car c'est la taille la plus grande vue par les autre. (La taille 80x80 est réservée pour l'entête).
+Page.EditProfile.Avatar.Description=Vous pouvez sélectionner une de vos images comme avatar. Elle ne doit pas dépasser la taille de 64x64 pixels car c'est la taille la plus grande, vue par les autres. (La taille 80x80 est réservée pour l'entête).
 Page.EditProfile.Avatar.Delete=Pas d'avatar
 Page.EditProfile.Fields.Title=Champs personnalisés
-Page.EditProfile.Fields.Description=Vous pouvez ajouter ici des champs personalisés à votre profil. Ces champs peuvent contenir tout ce que vous voulez et être aussi laconique ou aussi long que vous le souhaitez. Gardez à l'esprit qu'en terme d'anonymat, moins vous en dite, mieux c'est!
+Page.EditProfile.Fields.Description=Vous pouvez ajouter ici des champs personnalisés à votre profil. Ces champs peuvent contenir tout ce que vous voulez et être aussi laconique ou aussi long que vous le souhaitez. Gardez à l'esprit qu'en terme d'anonymat, moins vous en dites, mieux c'est!
 Page.EditProfile.Fields.Button.Edit=Éditer
 Page.EditProfile.Fields.Button.MoveUp=Déplacer vers le haut
 Page.EditProfile.Fields.Button.MoveDown=Déplacer vers le bas
@@ -184,7 +184,7 @@ Page.ViewSone.UnknownSone.Description=Ce Sone n'a pas encore été récupéré.
 Page.ViewSone.UnknownSone.LinkToWebOfTrust=Ce Sone n'est pas connu, son profile WoT doit être disponible.
 Page.ViewSone.WriteAMessage=Vous pouvez écrire un message à ce Sone ici. Veuillez noter que tout le monde sera capable de lire ce message!
 Page.ViewSone.PostList.Title=Messages par {sone}
-Page.ViewSone.PostList.Text.NoPostYet=Ce Sone n'as encore rien envoyé.
+Page.ViewSone.PostList.Text.NoPostYet=Ce Sone n'a encore rien envoyé.
 Page.ViewSone.Profile.Title=Profile
 Page.ViewSone.Profile.Label.Name=Nom
 Page.ViewSone.Profile.Label.Albums=Albums
@@ -222,9 +222,9 @@ Page.UnfollowSone.Title=Ne plus suivre Sone - Sone
 
 Page.ImageBrowser.Title=Explorateur d'images - Sone
 Page.ImageBrowser.Album.Title=Album “{album}”
-Page.ImageBrowser.Album.Error.NotFound.Text=l'Album recherché n'est pas disponible. Il est possible qu'il ne soit pas encore mis à jour, ou qu'il est été supprimé.
+Page.ImageBrowser.Album.Error.NotFound.Text=l'Album recherché n'est pas disponible. Il est possible qu'il ne soit toujours pas mis à jour, ou qu'il ait été supprimé.
 Page.ImageBrowser.Sone.Title=Albums de {sone}
-Page.ImageBrowser.Sone.Error.NotFound.Text=Le Sone recherché ne peut pas être trouvé. Il est possible qu'il ne soit pas encore téléchargé.
+Page.ImageBrowser.Sone.Error.NotFound.Text=Le Sone recherché ne peut pas être trouvé. Il est possible qu'il ne soit toujours pas téléchargé.
 Page.ImageBrowser.Header.Albums=Albums
 Page.ImageBrowser.Header.Images=Images
 Page.ImageBrowser.Link.All=Tous les Sones
@@ -305,13 +305,13 @@ Page.NoPermission.Title=Accès non autorisé - Sone
 Page.NoPermission.Page.Title=Accès non autorisé
 Page.NoPermission.Text.NoPermission=Vous avez tenté une action pour laquelle vous n'avez pas les droits suffisants. Veuillez vous abstenir de ces actions dans le futur ou nous serons forcés de prendre des contre-mesures!
 
-Page.EmptyImageTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyImageTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyImageTitle.Text.EmptyImageTitle=You have to give your image a title. Please go back to the previous page and enter a title.
+Page.EmptyImageTitle.Title=Le titre ne doit pas être vide - Sone
+Page.EmptyImageTitle.Page.Title=Le titre ne doit pas être vide
+Page.EmptyImageTitle.Text.EmptyImageTitle=Vous devez donner un titre à votre image. S'il vous plaît, retournez à la page précédente et saisissez un titre.
 
-Page.EmptyAlbumTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyAlbumTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=You have to give your album a title. Please go back to the previous page and enter a title.
+Page.EmptyAlbumTitle.Title=Le titre ne doit pas être vide - Sone
+Page.EmptyAlbumTitle.Page.Title=Le titre ne doit pas être vide
+Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=Vous devez donner un titre à votre album. S'il vous plaît, retournez à la page précédente et saisissez un titre.
 
 Page.DismissNotification.Title=Effacer la notification - Sone
 
@@ -363,7 +363,7 @@ View.Post.SendReply=Répondre!
 View.Post.Reply.DeleteLink=Effacer
 View.Post.LikeLink=Aime
 View.Post.UnlikeLink=N'aime pas
-View.Post.ShowSource=Activer/Désactiver le parser
+View.Post.ShowSource=Activer/Désactiver l'analyseur.
 View.Post.NotDownloaded=Ce message n'a pas encore été téléchargé, ou a été effacé.
 View.Post.ShowMore=Voir plus
 View.Post.ShowLess=Vois moins
@@ -421,9 +421,9 @@ WebInterface.DefaultText.UploadImage.Description=Description de l'image
 WebInterface.DefaultText.EditImage.Title=Titre de l'image
 WebInterface.DefaultText.EditImage.Description=Description de l'image
 WebInterface.DefaultText.Option.PostsPerPage=Nombre de messages à afficher par page
-WebInterface.DefaultText.Option.ImagesPerPage=Nombre d'images à afficher par pages
-WebInterface.DefaultText.Option.CharactersPerPost=Nombre de charactère qu'une publication doit avoir pour être racourcie
-WebInterface.DefaultText.Option.PostCutOffLength=Nombre de charactère du descriptif de la publication racourcie
+WebInterface.DefaultText.Option.ImagesPerPage=Nombre d'images à afficher par page
+WebInterface.DefaultText.Option.CharactersPerPost=Nombre de caractère qu'une publication doit avoir pour être raccourcie
+WebInterface.DefaultText.Option.PostCutOffLength=Nombre de caractère du descriptif de la publication raccourcie
 WebInterface.DefaultText.Option.PositiveTrust=La note de confiance positive à assigner
 WebInterface.DefaultText.Option.NegativeTrust=Une note de confiance négative à assigner
 WebInterface.DefaultText.Option.TrustComment=Le commentaire à mettre dans le "Web of Trust"
@@ -452,15 +452,14 @@ Notification.NewReply.ShortText=De nouvelles réponses ont été découvertes.
 Notification.NewReply.Text=De nouvelles réponses ont été trouvées pour les messages des Sones suivants:
 Notification.SoneIsBeingRescued.Text=Les Sones suivants sont actuellement en cours de restauration.
 Notification.SoneRescued.Text=Les Sones suivants ont été sauvés:
-Notification.SoneRescued.Text.RememberToUnlock=Veuillez vous souvenir de contrôler les messages et réponses que vous avez donnés et n'oubliez ps de déverrouiller vos Sones!
-Notification.LockedSones.Text=Les Sones suivants ont été verrouillés pour plus de 5 minutes. Veuillez vérifier si vous voulez vraiment garder ces Sones bloqués:
+Notification.SoneRescued.Text.RememberToUnlock=Veuillez vous souvenir de contrôler les messages et réponses que vous avez donnés et n'oubliez pas de déverrouiller vos Sones!
+Notification.LockedSones.Text=Les Sones suivants ont été verrouillés pour une durée de plus de 5 minutes. Veuillez vérifier si vous voulez vraiment garder ces Sones bloqués:
 Notification.NewVersion.Text=La version ${version} du plugin Sone a été trouvée. Téléchargez la depuis USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}​!
 Notification.InsertingImages.Text=Les images suivantes sont en cours d'insertion:
 Notification.InsertedImages.Text=Les images suivantes ont été insérées:
 Notification.ImageInsertFailed.Text=Les images suivantes ne peuvent être insérées:
 Notification.Mention.ShortText=Vous avez été mentionné.
 Notification.Mention.Text=Vous avez été mentionné dans les messages suivants:
-Notification.SoneIsInserting.Text=Your Sone sone://{0} is now being inserted.
-Notification.SoneIsInserted.Text=Your Sone sone://{0} has been inserted in {1,number} {1,choice,0#seconds|1#second|1<seconds}.
-Notification.SoneInsertAborted.Text=Your Sone sone://{0} could not be inserted.
-# 60, 100, 308-310, 312-314, 463-465
+Notification.SoneIsInserting.Text=Votre Sone sone://{0} va maintenant être inséré.
+Notification.SoneIsInserted.Text=votre Sone sone://{0} a été inséré dans {1,number} {1,choice,0#seconds|1#second|1<seconds}.
+Notification.SoneInsertAborted.Text=Votre Sone sone://{0} ne peut pas être inséré.
index 0cfd250..af7a295 100644 (file)
@@ -232,13 +232,13 @@ Page.ImageBrowser.CreateAlbum.Button.CreateAlbum=アルバムを作成
 Page.ImageBrowser.Album.Edit.Title=アルバムを編集
 Page.ImageBrowser.Album.Delete.Title=アルバムを削除
 Page.ImageBrowser.Album.Label.AlbumImage=アルバム画像:
-Page.ImageBrowser.Album.Label.Title=タイトル:
+Page.ImageBrowser.Album.Label.Title=題名:
 Page.ImageBrowser.Album.Label.Description=説明:
 Page.ImageBrowser.Album.AlbumImage.Choose=アルバム画像を選択…
 Page.ImageBrowser.Album.Button.Save=アルバムを保存
 Page.ImageBrowser.Album.Button.Delete=アルバムを削除
 Page.ImageBrowser.Image.Edit.Title=アルバムを編集
-Page.ImageBrowser.Image.Title.Label=タイトル:
+Page.ImageBrowser.Image.Title.Label=題名:
 Page.ImageBrowser.Image.Description.Label=説明:
 Page.ImageBrowser.Image.Button.MoveLeft=◀
 Page.ImageBrowser.Image.Button.Save=画像を保存
@@ -305,13 +305,13 @@ Page.NoPermission.Title=不正なアクセス - Sone
 Page.NoPermission.Page.Title=不正なアクセス
 Page.NoPermission.Text.NoPermission=許可されていないアクセスが検知されました。これ以上続行すると防衛機構が作動するかも知れません!
 
-Page.EmptyImageTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyImageTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyImageTitle.Text.EmptyImageTitle=You have to give your image a title. Please go back to the previous page and enter a title.
+Page.EmptyImageTitle.Title=題名がありません - Sone
+Page.EmptyImageTitle.Page.Title=題名がありません
+Page.EmptyImageTitle.Text.EmptyImageTitle=画像には題名が必要です。前にページに戻り題名を入力して下さい。
 
-Page.EmptyAlbumTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyAlbumTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=You have to give your album a title. Please go back to the previous page and enter a title.
+Page.EmptyAlbumTitle.Title=題名がありません - Sone
+Page.EmptyAlbumTitle.Page.Title=題名がありません
+Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=アルバムには題名が必要です。前のページに戻り題名を入力して下さい。
 
 Page.DismissNotification.Title=通知を消す - Sone
 
@@ -379,7 +379,7 @@ View.CreateAlbum.Label.Name=名称:
 View.CreateAlbum.Label.Description=説明:
 
 View.UploadImage.Title=画像をアップロード
-View.UploadImage.Label.Title=タイトル:
+View.UploadImage.Label.Title=題名:
 View.UploadImage.Label.Description=説明:
 View.UploadImage.Button.UploadImage=画像をアップロードする
 
@@ -412,13 +412,13 @@ WebInterface.DefaultText.BirthYear=年
 WebInterface.DefaultText.FieldName=項目名
 WebInterface.DefaultText.Option.InsertionDelay=Soneに変更が加わってからインサートするまでの遅延時間(秒)
 WebInterface.DefaultText.Search=何をお探しですか?
-WebInterface.DefaultText.CreateAlbum.Name=アルバムのタイトル
+WebInterface.DefaultText.CreateAlbum.Name=アルバムの題名
 WebInterface.DefaultText.CreateAlbum.Description=アルバムの説明
-WebInterface.DefaultText.EditAlbum.Title=アルバムのタイトル
+WebInterface.DefaultText.EditAlbum.Title=アルバムの題名
 WebInterface.DefaultText.EditAlbum.Description=アルバムの説明
-WebInterface.DefaultText.UploadImage.Title=画像のタイトル
+WebInterface.DefaultText.UploadImage.Title=画像の題名
 WebInterface.DefaultText.UploadImage.Description=画像の説明
-WebInterface.DefaultText.EditImage.Title=画像のタイトル
+WebInterface.DefaultText.EditImage.Title=画像の題名
 WebInterface.DefaultText.EditImage.Description=画像の説明
 WebInterface.DefaultText.Option.PostsPerPage=ページに表示する投稿の数
 WebInterface.DefaultText.Option.ImagesPerPage=ページに表示する画像の数
@@ -463,4 +463,4 @@ Notification.Mention.Text=次の投稿でメンションされています:
 Notification.SoneIsInserting.Text=あなたのSone sone://{0}は現在インサート中です。
 Notification.SoneIsInserted.Text=あなたのSone sone://{0}は{1,number}{1,choice,0#秒|1#秒|1<秒}でインサートされました。
 Notification.SoneInsertAborted.Text=あなたのSone sone://{0}のインサートに失敗しました。
-# 60, 100, 308-310, 312-314
+# 60, 100
index da5ccda..568e9e6 100644 (file)
@@ -57,7 +57,7 @@ Page.Options.Option.InsertionDelay.Description=Czas oczekiwania użytkownika Son
 Page.Options.Option.PostsPerPage.Description=Ilość postów wyświetlanych na stronie przed pojawieniem się znaków paginacji.
 Page.Options.Option.ImagesPerPage.Description=Ilość obrazków wyświetlanych na stronie przed pojawieniem się znaków paginacji.
 Page.Options.Option.CharactersPerPost.Description=Ilość znaków pokazywanych w poście zanim zostanie on obcięty i pojawi się link do jego rozszerzenia (-1 powoduje wyłączenie). Długość fragmentu zależy od poniższej opcji.
-Page.Options.Option.PostCutOffLength.Description=Ilość znaków wyświetlanych w przypadku za długiego postu (zobacz opcję powyżej).
+Page.Options.Option.PostCutOffLength.Description=Ilość znaków które są pokazywane gdy post uznajemy za zbyt długi (zobacz opcję powyżej). Ignorowane jeżeli opcja “ilość znaków do pokazania” jest wyłączona (jest ustawiona na -1).
 Page.Options.Option.RequireFullAccess.Description=Opcja odmowy dostępu do Sone hostom bez przyznanego pełnego dostępu.
 Page.Options.Section.TrustOptions.Title=Ustawienia Zaufania
 Page.Options.Option.PositiveTrust.Description=Punkty pozytywnego zaufania, które chcesz przyznać innym użytkownikom Sone klikając na ikonę pod postem lub odpowiedzią.
@@ -97,7 +97,7 @@ Page.Index.Button.Post=Napisz!
 Page.Index.PostList.Title=Wątek
 Page.Index.PostList.Text.NoPostYet=Nie ma jeszcze żądnych postów. Można rozpocząć pisanie wątku!
 Page.Index.PostList.Text.FollowSomeSones=Być może nie śledzisz żadnych Sone? Spójrz na tę listę {link}znane Sone{/link} i zacznij kogoś śledzić.
-Page.Index.PostList.Text.AutoFollowOption=You also have the option of automatically following newly discovered Sones. Take a look at the {link}options{/link} to activate the auto-follow feature!
+Page.Index.PostList.Text.AutoFollowOption=Masz też możliwość aby automatycznie śledzić nowo odkryte Sone. Zobacz na {link}opcje{/link} aby aktywować funkcję automatycznego śledzenia!
 
 Page.New.Title=Nowe Posty i Odpowiedzi - Sone
 Page.New.Page.Title=Nowe Posty i Odpowiedzi
@@ -222,7 +222,7 @@ Page.UnfollowSone.Title=Przestań śledzić Sone - Sone
 
 Page.ImageBrowser.Title=Wyszukiwarka Obrazów - Sone
 Page.ImageBrowser.Album.Title=Album “{album}”
-Page.ImageBrowser.Album.Error.NotFound.Text=Nie można znaleźć żądanego albumu. Prawdopodobnie nie został jeszcze ściagnięty, albo  został usunięty.
+Page.ImageBrowser.Album.Error.NotFound.Text=Nie można znaleźć żądanego albumu. Prawdopodobnie nie został jeszcze ściagnięty, albo został usunięty.
 Page.ImageBrowser.Sone.Title=Albumy {sone}
 Page.ImageBrowser.Sone.Error.NotFound.Text=Nie można znaleźć żądanego Sone. Prawdopodobnie nie został jeszcze ściągnięty.
 Page.ImageBrowser.Header.Albums=Albumy
@@ -281,7 +281,7 @@ Page.Bookmark.Title=Zakładka - Sone
 Page.Unbookmark.Title=Usuń zakładkę - Sone
 Page.Bookmarks.Title=Zakładka - Sone
 Page.Bookmarks.Page.Title=Zakładki
-Page.Bookmarks.Text.NoBookmarks= Nie masz obecnie żadnych zakładek. Możesz dodać posty do zakładek klikając  gwiazdkę poniżej postu.
+Page.Bookmarks.Text.NoBookmarks= Nie masz obecnie żadnych zakładek. Możesz dodać posty do zakładek klikając gwiazdkę poniżej postu.
 Page.Bookmarks.Text.PostsNotLoaded=Niektóre z zaznaczonych przez ciebie postów nie zostały wyświetlone, ponieważ wystąpił problem z ich załadowaniem. Dzieje się tak, jeśli Sone było niedawno restartowane, lub gdy posty zostały usunięte. Jeśli jesteś pewien, że posty zostały usunięte, to możesz je {link}odznaczyć{/link}.
 
 Page.Search.Title=Szukaj - Sone
@@ -297,7 +297,7 @@ Page.Rescue.Text.Procedure=Tryb Rarunkowy polega na pobraniu ostatniej wprowadzo
 Page.Rescue.Text.Fetching=Tryb Ratunkowy Sone pobiera właśnie edycję {0} twojego Sone.
 Page.Rescue.Text.Fetched=Tryb Ratunkowy Sone pobrał edycję {0} twojego Sone. Sprawdź swoje posty, odpowiedzi oraz profil. Jeśli podoba ci się zawartość aktualnego Sone, to mozesz go odblokować.
 Page.Rescue.Text.FetchedLast= Tryb Ratunkowy Sone pobrał ostatnią dostępną edycję. Jeśli nie udało się przywrócić twojego Sone, to nie masz teraz szczęścia.
-Page.Rescue.Text.NotFetched=Tryb Ratunkowy Sone nie mógł sćiągnąć edycji  {0} twojego Sone.  Spróbuj pobrać ponownie edycję {0}, albo pobierz kolejną starszą edycję.
+Page.Rescue.Text.NotFetched=Tryb Ratunkowy Sone nie mógł sćiągnąć edycji {0} twojego Sone. Spróbuj pobrać ponownie edycję {0}, albo pobierz kolejną starszą edycję.
 Page.Rescue.Label.NextEdition=Następna edycja:
 Page.Rescue.Button.Fetch=Pobierz edycję
 
@@ -305,13 +305,13 @@ Page.NoPermission.Title=Nieupoważniony dostęp- Sone
 Page.NoPermission.Page.Title=Nieupoważniony dostęp
 Page.NoPermission.Text.NoPermission=Próbowałeś zrobić coś do czego nie masz wystarczającej autoryzacji. Na przyszłość nie podejmuj tego typu działań, albo będziemy zmuszeni podjać odpowiednie kroki.
 
-Page.EmptyImageTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyImageTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyImageTitle.Text.EmptyImageTitle=You have to give your image a title. Please go back to the previous page and enter a title.
+Page.EmptyImageTitle.Title=Tytuł Nie Może Być Pusty - Sone
+Page.EmptyImageTitle.Page.Title=Tytuł Nie Może Być Pusty
+Page.EmptyImageTitle.Text.EmptyImageTitle=Musisz nadać tytuł swojemu obrazowi. Proszę wróć na poprzednią stronę i nadaj tytuł.
 
-Page.EmptyAlbumTitle.Title=Title Must Not Be Empty - Sone
-Page.EmptyAlbumTitle.Page.Title=Title Must Not Be Empty
-Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=You have to give your album a title. Please go back to the previous page and enter a title.
+Page.EmptyAlbumTitle.Title=Tytuł Nie Może Być Pusty - Sone
+Page.EmptyAlbumTitle.Page.Title=Tytuł Nie Może Być Pusty
+Page.EmptyAlbumTitle.Text.EmptyAlbumTitle=Musisz nadać tytuł swojemu albumowi. Proszę wróć na poprzednią stronę i nadaj tytuł.
 
 Page.DismissNotification.Title=Odrzuć powiadomienie - Sone
 
@@ -364,7 +364,7 @@ View.Post.Reply.DeleteLink=Usuń
 View.Post.LikeLink=Lubię
 View.Post.UnlikeLink=Nie lubię
 View.Post.ShowSource=Parsowanie
-View.Post.NotDownloaded=Ten post albo nie został jeszcze ściągnięty albo  został usunięty.
+View.Post.NotDownloaded=Ten post albo nie został jeszcze ściągnięty albo został usunięty.
 View.Post.ShowMore=pokaż więcej
 View.Post.ShowLess=pokaż mniej
 
@@ -452,9 +452,9 @@ Notification.NewReply.ShortText=Znaleziono nowe odpowiedzi.
 Notification.NewReply.Text=Znaleziono nowe odpowiedzi napisane przez poniższych użytkowników Sone:
 Notification.SoneIsBeingRescued.Text=Następujące Sone są aktualnie odzyskiwane:
 Notification.SoneRescued.Text=Odzyskano następujące Sone:
-Notification.SoneRescued.Text.RememberToUnlock=Należy pamiętać o zarządzaniu napisanymi postami i odpowiedziami oraz  nie zapomnieć o odblokowaniu swoich Sone!
+Notification.SoneRescued.Text.RememberToUnlock=Należy pamiętać o zarządzaniu napisanymi postami i odpowiedziami oraz nie zapomnieć o odblokowaniu swoich Sone!
 Notification.LockedSones.Text=Następujące Sone są zablokowane od ponad 5 minut. Sprawdź czy chcesz, żeby pozostały zablokowane.
-Notification.NewVersion.Text=Znaleziono wersję {version}wtyczki Sone. Ściągnij ją z  USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}!
+Notification.NewVersion.Text=Znaleziono wersję {version}wtyczki Sone. Ściągnij ją z USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/{edition}!
 Notification.InsertingImages.Text=Ładowane są następujące obrazy:
 Notification.InsertedImages.Text=Załadowano nastepujące obrazy:
 Notification.ImageInsertFailed.Text=Nie można załadowac następujących obrazów:
@@ -463,4 +463,3 @@ Notification.Mention.Text=Zostałeś oznaczony w następujących postach:
 Notification.SoneIsInserting.Text=Twoje Sone sone://{0} jest w tej chili wysyłane.
 Notification.SoneIsInserted.Text=Twoje sone://{0} zostało wysłane w {1,number} {1,choice,0#seconds|1#second|1<seconds}.
 Notification.SoneInsertAborted.Text=Twoje Sone sone://{0} nie mogło zostać wysłane.
-# 60, 100, 308-310, 312-314
index 74ea9f0..f38db21 100644 (file)
@@ -2,7 +2,7 @@
 
        <h1><%= Page.About.Page.Title|l10n|html></h1>
 
-       <p>Sone – The Freenet Social Network Plugin, Version <% version|html>, © 2010–2012 by David ‘Bombe’ Roden.</p>
+       <p>Sone – The Freenet Social Network Plugin, Version <% version|html>, © 2010–<% year|html> by David ‘Bombe’ Roden.</p>
 
        <p>
                <%= Page.About.Flattr.Description|l10n|html|replace needle=="{link}" replacement=='<a href="/?_CHECKED_HTTP_=https://www.flattr.com/" title="Flattr Homepage" target="_blank">'|replace needle=="{/link}" replacement=='</a>'>
@@ -11,7 +11,7 @@
        <h2><%= Page.About.Homepage.Title|l10n|html></h2>
 
        <p>
-               <%= Page.About.Homepage.Description|l10n|html|replace needle=="{link}" replacement=='<a href="/USK@nwa8lHa271k2QvJ8aa0Ov7IHAV-DFOCFgmDt3X6BpCI,DuQSUZiI~agF8c-6tjsFFGuZ8eICrzWCILB60nT8KKo,AQACAAE/sone/49/">'|replace needle=="{/link}" replacement=='</a>'>
+               <%= Page.About.Homepage.Description|l10n|html|replace needle=="{link}" replacement=='<a href="/<% homepage|html>/">'|replace needle=="{/link}" replacement=='</a>'>
        </p>
 
        <h2><%= Page.About.License.Title|l10n|html></h2>
diff --git a/src/test/java/net/pterodactylus/sone/text/TextFilterTest.java b/src/test/java/net/pterodactylus/sone/text/TextFilterTest.java
new file mode 100644 (file)
index 0000000..1076a8a
--- /dev/null
@@ -0,0 +1,52 @@
+package net.pterodactylus.sone.text;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+import org.junit.Test;
+
+/**
+ * JUnit test for {@link TextFilter}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class TextFilterTest {
+
+       @Test
+       public void textFilterCanBeCreated() {
+               new TextFilter();
+       }
+
+       @Test
+       public void textFilterRemovesHttpLinkToSameHost() {
+               String textWithHttpLink = "Some text with an http://foo.bar/link.html in it.";
+               assertThat(TextFilter.filter("foo.bar", textWithHttpLink), is("Some text with an link.html in it."));
+       }
+
+       @Test
+       public void textFilterRemovesHttpsLinkToSameHost() {
+               String textWithHttpLink = "Some text with an https://foo.bar/link.html in it.";
+               assertThat(TextFilter.filter("foo.bar", textWithHttpLink), is("Some text with an link.html in it."));
+       }
+
+       @Test
+       public void textWithoutALinkIsReturnedUnmodified() {
+               String textWithHttpLink = "Some text without a link in it.";
+               assertThat(TextFilter.filter("foo.bar", textWithHttpLink), is("Some text without a link in it."));
+       }
+
+       @Test
+       public void nothingIsRemovedWhenThereIsNoHostHeader() {
+               String textWithHttpLink = "Some text with an https://foo.bar/link.html in it.";
+               assertThat(TextFilter.filter(null, textWithHttpLink), is("Some text with an https://foo.bar/link.html in it."));
+       }
+
+       @Test
+       public void textFilterDoesNotRemoveLinksToDifferentHost() {
+               String textWithHttpLink = "Some text with an https://foo.bar/link.html in it.";
+               assertThat(TextFilter.filter("bar.baz", textWithHttpLink), is("Some text with an https://foo.bar/link.html in it."));
+       }
+
+}