diff --git a/chrome.manifest.in b/chrome.manifest.in
index 67b6fc7..4fa9f1b 100644
--- a/chrome.manifest.in
+++ b/chrome.manifest.in
@@ -50,6 +50,7 @@ locale snowl cs-CZ @chrome_path@locale/cs-CZ/
locale snowl da-DK @chrome_path@locale/da-DK/
locale snowl de-DE @chrome_path@locale/de-DE/
locale snowl en-US @chrome_path@locale/en-US/
+locale snowl es-ES @chrome_path@locale/es-ES/
locale snowl fr-FR @chrome_path@locale/fr-FR/
locale snowl hu-HU @chrome_path@locale/hu-HU/
locale snowl ja-JP @chrome_path@locale/ja-JP/
diff --git a/install.rdf.in b/install.rdf.in
index 0ec18a1..4ef3434 100644
--- a/install.rdf.in
+++ b/install.rdf.in
@@ -20,6 +20,7 @@
kkemenczy
markh
myahoo
+ RigoNet
steekid
typh
Wacław Jacek
diff --git a/locale/es-ES/about.properties b/locale/es-ES/about.properties
new file mode 100644
index 0000000..6ea9a2a
--- /dev/null
+++ b/locale/es-ES/about.properties
@@ -0,0 +1,45 @@
+# LOCALIZATION NOTE: description found in Addons list when selected and About
+
+#extensions.snowl@mozilla.org.description = Conversations redelivered
+
+# XXX Is there a better way to localize the attribution string? Perhaps we
+
+# could stick the content in an XHTML file that gets localized, and then we
+
+# could load the localized version in an iframe inside the About dialog?
+
+# LOCALIZATION NOTE: The attribution string is static but includes links
+
+# to the icons and licenses it references, so we use a property to construct it.
+
+# %1$S = link to the silk icon set
+
+# %2$S = link to the Creative Commons Attribution 2.5 License
+
+# %3$S = link to the OPML Icon Project
+
+# %4$S = link to the Creative Commons Attribution-Share Alike 2.5 License
+
+contributors1=La mayoría de iconos son de %1$S, con licencia bajo %2$S. El icono OPML es de %3$S, con licencia bajo %4$S.
+#contributors2 = The OPML icon is from %1$S, licensed under a %2$S.
+
+# XXX Should any of these be localized, or is it important to use their
+
+# original names?
+
+silkIconSetName=Silk icon por famfamfam
+ccA25LicenseName=Licencia Creative Commons Attribution 2.5
+opmlIconProjectName=Proyecto Icono OPML
+ccASA25LicenseName=Licencia Creative Commons Attribution-Share Alike 2.5
+# LOCALIZATION NOTE: These URLs are here because it seems better than
+
+# hardcoding them in the script that constructs the attribution string,
+
+# but they probably shouldn't be localized (unless perhaps the pages
+
+# referenced have localized versions).
+
+silkIconSetURL=http://www.famfamfam.com/lab/icons/silk/
+ccA25LicenseURL=http://creativecommons.org/licenses/by/2.5/
+opmlIconProjectURL=http://opmlicons.com/
+ccASA25LicenseURL=http://creativecommons.org/licenses/by-sa/2.5/
diff --git a/locale/es-ES/browser.dtd b/locale/es-ES/browser.dtd
new file mode 100644
index 0000000..f3b8d92
--- /dev/null
+++ b/locale/es-ES/browser.dtd
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/collections.dtd b/locale/es-ES/collections.dtd
new file mode 100644
index 0000000..1eaf375
--- /dev/null
+++ b/locale/es-ES/collections.dtd
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/datastore.properties b/locale/es-ES/datastore.properties
new file mode 100644
index 0000000..9949773
--- /dev/null
+++ b/locale/es-ES/datastore.properties
@@ -0,0 +1,32 @@
+# These are the default collections that Snowl displays in the collections pane.
+
+# They get inserted into the database when it is first created after the user
+
+# installs Snowl.
+
+allCollectionName=Todos los mensajes
+sourcesCollectionName=Todos los orígenes
+authorsCollectionName=Todos los autores
+customCollectionName=Personalizado
+# Places rebuild notification alert
+
+rebuildPlacesTitleMsg=Reconstruir Lugares Snowl
+rebuildPlacesDialogMsg=La base de datos Snowl de Lugares será reconstruida por una actualización, recuperación de la base de datos o petición del usuario. Podría duras varios minutos según el tamaño de la base de datos. El progreso de cada elemento convertido se muestra en la barra de estado.
+rebuildPlacesStarted=Reconstrucción de la base de datos de Lugares iniciada...
+rebuildPlacesConverted=Convertido a Lugares:
+rebuildPlacesCompleted=Reconstrucción completada de la base de datos de Lugares
+# Places author rebuild confirmation dialog strings
+
+rebuildPlacesAuthorTitleMsg=Reconstruir Lugares de Autores Snowl.
+rebuildPlacesAuthorDialogMsg=Hay %1$S registros de autor en la base de datos. ¿Desea crear una recopilación de Autor?. Una recopilación de autor se puede crear en cualquier momento reconstruyendo la base de datos de Lugares.
+# New View title for dialog
+
+newViewTitle=Nueva Vista
+# Remove items confirm dialog strings
+
+removeSourceTitleMsg=Eliminar Origen
+removeSourceDialogMsg=Eliminar este origen eliminará permanentemente el origen y todos los autores y mensajes.
+removeAuthorTitleMsg=Eliminar Autor
+removeAuthorDialogMsg=Eliminar este autor eliminará permanentemente el autor y todos sus mensajes.
+removeViewTitleMsg=Eliminar Vista
+removeViewDialogMsg=Confirmar eliminación de esta vista.
diff --git a/locale/es-ES/date.js b/locale/es-ES/date.js
new file mode 100644
index 0000000..69ecdfc
--- /dev/null
+++ b/locale/es-ES/date.js
@@ -0,0 +1,145 @@
+/**
+ * @version: 1.0 Alpha-1
+ * @author: Coolite Inc. http://www.coolite.com/
+ * @date: 2008-05-13
+ * @copyright: Copyright (c) 2006-2008, Coolite Inc. (http://www.coolite.com/). All rights reserved.
+ * @license: Licensed under The MIT License. See license.txt and http://www.datejs.com/license/.
+ * @website: http://www.datejs.com/
+ */
+Date.CultureInfo={name:"es-ES",englishName:"Spanish (España)",nativeName:"Español (España)",dayNames:["Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado"],abbreviatedDayNames:["Dom","Lun","Mar","Mie","Jue","Vie","Sab"],shortestDayNames:["Do","Lu","Ma","Mi","Ju","Vi","Sa"],firstLetterDayNames:["D","L","M","X","J","V","S"],monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],abbreviatedMonthNames:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],amDesignator:"AM",pmDesignator:"PM",firstDayOfWeek:1,twoDigitYearMax:2029,dateElementOrder:"dmy",formatPatterns:{shortDate:"d/M/yyyy",longDate:"dddd, dd MMMM, yyyy",shortTime:"h:mm tt",longTime:"h:mm:ss tt",fullDateTime:"dddd, dd MMMM, yyyy h:mm:ss tt",sortableDateTime:"yyyy-MM-ddTHH:mm:ss",universalSortableDateTime:"yyyy-MM-dd HH:mm:ssZ",rfc1123:"ddd, dd MMM yyyy HH:mm:ss GMT",monthDay:"dd MMMM",yearMonth:"MMMM, yyyy"},regexPatterns:{ene:/^ene(ro)?/i,feb:/^feb(rero)?/i,mar:/^mar(zo)?/i,abr:/^abr(il)?/i,may:/^may(o)?/i,jun:/^jun(io)?/i,jul:/^jul(io)?/i,ago:/^ago(sto)?/i,sep:/^sep(t(iembre)?)?/i,oct:/^oct(ubre)?/i,nov:/^nov(iembre)?/i,dic:/^dic(iembre)?/i,dom:/^do(m(ingo)?)?/i,lun:/^lu(n(es)?)?/i,mar:/^ma(r(t(es)?)?)?/i,mie:/^mi(e(rcoles)?)?/i,jue:/^ju(e(v(e(s)?)?)?)?/i,vie:/^vi(e(rnes)?)?/i,sab:/^sa(b(ado)?)?/i,futuro:/^siguiente/i,pasado:/^ultimo|pasado|prev(io)?/i,añadir:/^(\+|des(pues)?|desde|ahí)/i,restar:/^(\-|ant(es)?|hace)/i,ayer:/^aye(r)?/i,hoy:/^h(oy)?/i,mañana:/^mañ(ana)?/i,ahora:/^aho(ra)?/i,milisegundos:/^ms|mili(segundo)?s?/i,segundo:/^seg(undo)?s?/i,minuto:/^mn|min(uto)?s?/i,hora:/^h(ora)?s?/i,semana:/^sem(ana)?s?/i,mes:/^m(es)?es?/i,día:/^d(ía)?s?/i,año:/^a(ño)?s?/i,shortMeridian:/^(a|p)/i,longMeridian:/^(a\.?m?\.?|p\.?m?\.?)/i,timezone:/^((e(s|d)t|c(s|d)t|m(s|d)t|p(s|d)t)|((gmt)?\s*(\+|\-)\s*\d\d\d\d?)|gmt|utc)/i,ordinalSuffix:/^\s*(st|nd|rd|th)/i,timeContext:/^\s*(\:|a(?!u|p)|p)/i},timezones:[{name:"UTC",offset:"-000"},{name:"GMT",offset:"-000"},{name:"EST",offset:"-0500"},{name:"EDT",offset:"-0400"},{name:"CST",offset:"-0600"},{name:"CDT",offset:"-0500"},{name:"MST",offset:"-0700"},{name:"MDT",offset:"-0600"},{name:"PST",offset:"-0800"},{name:"PDT",offset:"-0700"}]};
+(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,p=function(s,l){if(!l){l=2;}
+return("000"+s).slice(l*-1);};$P.clearTime=function(){this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};$P.setTimeToNow=function(){var n=new Date();this.setHours(n.getHours());this.setMinutes(n.getMinutes());this.setSeconds(n.getSeconds());this.setMilliseconds(n.getMilliseconds());return this;};$D.today=function(){return new Date().clearTime();};$D.compare=function(date1,date2){if(isNaN(date1)||isNaN(date2)){throw new Error(date1+" - "+date2);}else if(date1 instanceof Date&&date2 instanceof Date){return(date1date2)?1:0;}else{throw new TypeError(date1+" - "+date2);}};$D.equals=function(date1,date2){return(date1.compareTo(date2)===0);};$D.getDayNumberFromName=function(name){var n=$C.dayNames,m=$C.abbreviatedDayNames,o=$C.shortestDayNames,s=name.toLowerCase();for(var i=0;i=start.getTime()&&this.getTime()<=end.getTime();};$P.isAfter=function(date){return this.compareTo(date||new Date())===1;};$P.isBefore=function(date){return(this.compareTo(date||new Date())===-1);};$P.isToday=function(){return this.isSameDay(new Date());};$P.isSameDay=function(date){return this.clone().clearTime().equals(date.clone().clearTime());};$P.addMilliseconds=function(value){this.setMilliseconds(this.getMilliseconds()+value);return this;};$P.addSeconds=function(value){return this.addMilliseconds(value*1000);};$P.addMinutes=function(value){return this.addMilliseconds(value*60000);};$P.addHours=function(value){return this.addMilliseconds(value*3600000);};$P.addDays=function(value){this.setDate(this.getDate()+value);return this;};$P.addWeeks=function(value){return this.addDays(value*7);};$P.addMonths=function(value){var n=this.getDate();this.setDate(1);this.setMonth(this.getMonth()+value);this.setDate(Math.min(n,$D.getDaysInMonth(this.getFullYear(),this.getMonth())));return this;};$P.addYears=function(value){return this.addMonths(value*12);};$P.add=function(config){if(typeof config=="number"){this._orient=config;return this;}
+var x=config;if(x.milliseconds){this.addMilliseconds(x.milliseconds);}
+if(x.seconds){this.addSeconds(x.seconds);}
+if(x.minutes){this.addMinutes(x.minutes);}
+if(x.hours){this.addHours(x.hours);}
+if(x.weeks){this.addWeeks(x.weeks);}
+if(x.months){this.addMonths(x.months);}
+if(x.years){this.addYears(x.years);}
+if(x.days){this.addDays(x.days);}
+return this;};var $y,$m,$d;$P.getWeek=function(){var a,b,c,d,e,f,g,n,s,w;$y=(!$y)?this.getFullYear():$y;$m=(!$m)?this.getMonth()+1:$m;$d=(!$d)?this.getDate():$d;if($m<=2){a=$y-1;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=0;f=$d-1+(31*($m-1));}else{a=$y;b=(a/4|0)-(a/100|0)+(a/400|0);c=((a-1)/4|0)-((a-1)/100|0)+((a-1)/400|0);s=b-c;e=s+1;f=$d+((153*($m-3)+2)/5)+58+s;}
+g=(a+b)%7;d=(f+g-e)%7;n=(f+3-d)|0;if(n<0){w=53-((g-s)/5|0);}else if(n>364+s){w=1;}else{w=(n/7|0)+1;}
+$y=$m=$d=null;return w;};$P.getISOWeek=function(){$y=this.getUTCFullYear();$m=this.getUTCMonth()+1;$d=this.getUTCDate();return p(this.getWeek());};$P.setWeek=function(n){return this.moveToDayOfWeek(1).addWeeks(n-this.getWeek());};$D._validate=function(n,min,max,name){if(typeof n=="undefined"){return false;}else if(typeof n!="number"){throw new TypeError(n+" is not a Number.");}else if(nmax){throw new RangeError(n+" is not a valid value for "+name+".");}
+return true;};$D.validateMillisecond=function(value){return $D._validate(value,0,999,"millisecond");};$D.validateSecond=function(value){return $D._validate(value,0,59,"second");};$D.validateMinute=function(value){return $D._validate(value,0,59,"minute");};$D.validateHour=function(value){return $D._validate(value,0,23,"hour");};$D.validateDay=function(value,year,month){return $D._validate(value,1,$D.getDaysInMonth(year,month),"day");};$D.validateMonth=function(value){return $D._validate(value,0,11,"month");};$D.validateYear=function(value){return $D._validate(value,0,9999,"year");};$P.set=function(config){if($D.validateMillisecond(config.millisecond)){this.addMilliseconds(config.millisecond-this.getMilliseconds());}
+if($D.validateSecond(config.second)){this.addSeconds(config.second-this.getSeconds());}
+if($D.validateMinute(config.minute)){this.addMinutes(config.minute-this.getMinutes());}
+if($D.validateHour(config.hour)){this.addHours(config.hour-this.getHours());}
+if($D.validateMonth(config.month)){this.addMonths(config.month-this.getMonth());}
+if($D.validateYear(config.year)){this.addYears(config.year-this.getFullYear());}
+if($D.validateDay(config.day,this.getFullYear(),this.getMonth())){this.addDays(config.day-this.getDate());}
+if(config.timezone){this.setTimezone(config.timezone);}
+if(config.timezoneOffset){this.setTimezoneOffset(config.timezoneOffset);}
+if(config.week&&$D._validate(config.week,0,53,"week")){this.setWeek(config.week);}
+return this;};$P.moveToFirstDayOfMonth=function(){return this.set({day:1});};$P.moveToLastDayOfMonth=function(){return this.set({day:$D.getDaysInMonth(this.getFullYear(),this.getMonth())});};$P.moveToNthOccurrence=function(dayOfWeek,occurrence){var shift=0;if(occurrence>0){shift=occurrence-1;}
+else if(occurrence===-1){this.moveToLastDayOfMonth();if(this.getDay()!==dayOfWeek){this.moveToDayOfWeek(dayOfWeek,-1);}
+return this;}
+return this.moveToFirstDayOfMonth().addDays(-1).moveToDayOfWeek(dayOfWeek,+1).addWeeks(shift);};$P.moveToDayOfWeek=function(dayOfWeek,orient){var diff=(dayOfWeek-this.getDay()+7*(orient||+1))%7;return this.addDays((diff===0)?diff+=7*(orient||+1):diff);};$P.moveToMonth=function(month,orient){var diff=(month-this.getMonth()+12*(orient||+1))%12;return this.addMonths((diff===0)?diff+=12*(orient||+1):diff);};$P.getOrdinalNumber=function(){return Math.ceil((this.clone().clearTime()-new Date(this.getFullYear(),0,1))/86400000)+1;};$P.getTimezone=function(){return $D.getTimezoneAbbreviation(this.getUTCOffset());};$P.setTimezoneOffset=function(offset){var here=this.getTimezoneOffset(),there=Number(offset)*-6/10;return this.addMinutes(there-here);};$P.setTimezone=function(offset){return this.setTimezoneOffset($D.getTimezoneOffset(offset));};$P.hasDaylightSavingTime=function(){return(Date.today().set({month:0,day:1}).getTimezoneOffset()!==Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.isDaylightSavingTime=function(){return(this.hasDaylightSavingTime()&&new Date().getTimezoneOffset()===Date.today().set({month:6,day:1}).getTimezoneOffset());};$P.getUTCOffset=function(){var n=this.getTimezoneOffset()*-10/6,r;if(n<0){r=(n-10000).toString();return r.charAt(0)+r.substr(2);}else{r=(n+10000).toString();return"+"+r.substr(1);}};$P.getElapsed=function(date){return(date||new Date())-this;};if(!$P.toISOString){$P.toISOString=function(){function f(n){return n<10?'0'+n:n;}
+return'"'+this.getUTCFullYear()+'-'+
+f(this.getUTCMonth()+1)+'-'+
+f(this.getUTCDate())+'T'+
+f(this.getUTCHours())+':'+
+f(this.getUTCMinutes())+':'+
+f(this.getUTCSeconds())+'Z"';};}
+$P._toString=$P.toString;$P.toString=function(format){var x=this;if(format&&format.length==1){var c=$C.formatPatterns;x.t=x.toString;switch(format){case"d":return x.t(c.shortDate);case"D":return x.t(c.longDate);case"F":return x.t(c.fullDateTime);case"m":return x.t(c.monthDay);case"r":return x.t(c.rfc1123);case"s":return x.t(c.sortableDateTime);case"t":return x.t(c.shortTime);case"T":return x.t(c.longTime);case"u":return x.t(c.universalSortableDateTime);case"y":return x.t(c.yearMonth);}}
+var ord=function(n){switch(n*1){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};return format?format.replace(/(\\)?(dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|S)/g,function(m){if(m.charAt(0)==="\\"){return m.replace("\\","");}
+x.h=x.getHours;switch(m){case"hh":return p(x.h()<13?(x.h()===0?12:x.h()):(x.h()-12));case"h":return x.h()<13?(x.h()===0?12:x.h()):(x.h()-12);case"HH":return p(x.h());case"H":return x.h();case"mm":return p(x.getMinutes());case"m":return x.getMinutes();case"ss":return p(x.getSeconds());case"s":return x.getSeconds();case"yyyy":return p(x.getFullYear(),4);case"yy":return p(x.getFullYear());case"dddd":return $C.dayNames[x.getDay()];case"ddd":return $C.abbreviatedDayNames[x.getDay()];case"dd":return p(x.getDate());case"d":return x.getDate();case"MMMM":return $C.monthNames[x.getMonth()];case"MMM":return $C.abbreviatedMonthNames[x.getMonth()];case"MM":return p((x.getMonth()+1));case"M":return x.getMonth()+1;case"t":return x.h()<12?$C.amDesignator.substring(0,1):$C.pmDesignator.substring(0,1);case"tt":return x.h()<12?$C.amDesignator:$C.pmDesignator;case"S":return ord(x.getDate());default:return m;}}):this._toString();};}());
+(function(){var $D=Date,$P=$D.prototype,$C=$D.CultureInfo,$N=Number.prototype;$P._orient=+1;$P._nth=null;$P._is=false;$P._same=false;$P._isSecond=false;$N._dateElement="day";$P.next=function(){this._orient=+1;return this;};$D.next=function(){return $D.today().next();};$P.last=$P.prev=$P.previous=function(){this._orient=-1;return this;};$D.last=$D.prev=$D.previous=function(){return $D.today().last();};$P.is=function(){this._is=true;return this;};$P.same=function(){this._same=true;this._isSecond=false;return this;};$P.today=function(){return this.same().day();};$P.weekday=function(){if(this._is){this._is=false;return(!this.is().sat()&&!this.is().sun());}
+return false;};$P.at=function(time){return(typeof time==="string")?$D.parse(this.toString("d")+" "+time):this.set(time);};$N.fromNow=$N.after=function(date){var c={};c[this._dateElement]=this;return((!date)?new Date():date.clone()).add(c);};$N.ago=$N.before=function(date){var c={};c[this._dateElement]=this*-1;return((!date)?new Date():date.clone()).add(c);};var dx=("sunday monday tuesday wednesday thursday friday saturday").split(/\s/),mx=("january february march april may june july august september october november december").split(/\s/),px=("Millisecond Second Minute Hour Day Week Month Year").split(/\s/),pxf=("Milliseconds Seconds Minutes Hours Date Week Month FullYear").split(/\s/),nth=("final first second third fourth fifth").split(/\s/),de;$P.toObject=function(){var o={};for(var i=0;itemp){throw new RangeError($D.getDayName(n)+" does not occur "+ntemp+" times in the month of "+$D.getMonthName(temp.getMonth())+" "+temp.getFullYear()+".");}
+return this;}
+return this.moveToDayOfWeek(n,this._orient);};};var sdf=function(n){return function(){var t=$D.today(),shift=n-t.getDay();if(n===0&&$C.firstDayOfWeek===1&&t.getDay()!==0){shift=shift+7;}
+return t.addDays(shift);};};for(var i=0;i-1;m--){v=px[m].toLowerCase();if(o1[v]!=o2[v]){return false;}
+if(k==v){break;}}
+return true;}
+if(j.substring(j.length-1)!="s"){j+="s";}
+return this["add"+j](this._orient);};};var nf=function(n){return function(){this._dateElement=n;return this;};};for(var k=0;k0&&!last){try{q=d.call(this,r[1]);}catch(ex){last=true;}}else{last=true;}
+if(!last&&q[1].length===0){last=true;}
+if(!last){var qx=[];for(var j=0;j0){rx[0]=rx[0].concat(p[0]);rx[1]=p[1];}}
+if(rx[1].length1){args=Array.prototype.slice.call(arguments);}else if(arguments[0]instanceof Array){args=arguments[0];}
+if(args){for(var i=0,px=args.shift();i2)?n:(n+(((n+2000)<$C.twoDigitYearMax)?2000:1900)));};},rday:function(s){return function(){switch(s){case"yesterday":this.days=-1;break;case"tomorrow":this.days=1;break;case"today":this.days=0;break;case"now":this.days=0;this.now=true;break;}};},finishExact:function(x){x=(x instanceof Array)?x:[x];for(var i=0;i$D.getDaysInMonth(this.year,this.month)){throw new RangeError(this.day+" is not a valid value for days.");}
+var r=new Date(this.year,this.month,this.day,this.hour,this.minute,this.second);if(this.timezone){r.set({timezone:this.timezone});}else if(this.timezoneOffset){r.set({timezoneOffset:this.timezoneOffset});}
+return r;},finish:function(x){x=(x instanceof Array)?flattenAndCompact(x):[x];if(x.length===0){return null;}
+for(var i=0;i
diff --git a/locale/es-ES/firstrun.dtd b/locale/es-ES/firstrun.dtd
new file mode 100644
index 0000000..f534490
--- /dev/null
+++ b/locale/es-ES/firstrun.dtd
@@ -0,0 +1,14 @@
+
+
+Herramientas>Snowl or desde el botón Snowl en la parte inferior izquierda de la ventana de tu navegador.">
+Vista>Barra de Herramientas>Personalizar…">
+ que aparece en la barra de direcciones de Firefox cuando visita una web con un canal.">
+Herramientas > Snowl o el botón Snowl abajo a la izquierda de la ventana del navegador.">
+río, flujo, y lista.">
+ en cualquier vista.">
+
+
+
+
+
+
diff --git a/locale/es-ES/list.dtd b/locale/es-ES/list.dtd
new file mode 100644
index 0000000..f66fdc3
--- /dev/null
+++ b/locale/es-ES/list.dtd
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/login.dtd b/locale/es-ES/login.dtd
new file mode 100644
index 0000000..47087ea
--- /dev/null
+++ b/locale/es-ES/login.dtd
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/locale/es-ES/login.properties b/locale/es-ES/login.properties
new file mode 100644
index 0000000..771b3e2
--- /dev/null
+++ b/locale/es-ES/login.properties
@@ -0,0 +1,14 @@
+# LOCALIZATION NOTE: The next two strings are for the message that prompts
+
+# the user to enter their username and password to access a source.
+
+#
+
+# %1$S = name (f.e. Planet Mozilla)
+
+# %2$S = URL (f.e. http://planet.mozilla.org/)
+
+namedSourcePrompt=El origen %1$S <%2$S> está solicitando un usuario y contraseña.
+# %S = URL (f.e. http://planet.mozilla.org/)
+
+namelessSourcePrompt=El origen %S está solicitando un usuario y contraseña.
diff --git a/locale/es-ES/message.dtd b/locale/es-ES/message.dtd
new file mode 100644
index 0000000..7a5afe0
--- /dev/null
+++ b/locale/es-ES/message.dtd
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/message.properties b/locale/es-ES/message.properties
new file mode 100644
index 0000000..45b4c39
--- /dev/null
+++ b/locale/es-ES/message.properties
@@ -0,0 +1,15 @@
+# Display page for message whose source has been unsubscribed or otherwise
+
+# cannot be found in the database.
+
+messageNotFound=Este mensaje ha sido borrado o no se encuentra (id:%1$S).
+messageNotFoundTitle=Mensaje %1$S no encontrado
+# Keyboard keys for actions on message(s) in the message list. Must be one char
+
+# corresponding to a keyboard key.
+
+messageDelete=d
+messageUndelete=u
+messageMarkRead=r
+messageMarkAllRead=R
+messageMarkFlagged=f
diff --git a/locale/es-ES/notification.dtd b/locale/es-ES/notification.dtd
new file mode 100644
index 0000000..9a3994e
--- /dev/null
+++ b/locale/es-ES/notification.dtd
@@ -0,0 +1 @@
+
diff --git a/locale/es-ES/opml.properties b/locale/es-ES/opml.properties
new file mode 100644
index 0000000..8874b65
--- /dev/null
+++ b/locale/es-ES/opml.properties
@@ -0,0 +1,22 @@
+# The title of the file picker dialog through which the user picks the name
+
+# and location of the exported file.
+
+filePickerTitle=Exportar orígenes como un archivo OPML
+# The title of the file filter that restricts the set of files shown in
+
+# the file picker dialog to OPML files (i.e. those with .opml extensions).
+
+opmlFilterTitle=Archivos OPML
+# The default name for the file in the file picker dialog.
+
+# Note: this string includes both the name (sources) and the extension (.opml),
+
+# but only the name should be localized. The extension should remain the same
+
+# across all locales.
+
+defaultFilename=origenes.opml
+# The title of the OPML document generated by the exporter.
+
+documentTitle=Orígenes Snowl
diff --git a/locale/es-ES/preferences.dtd b/locale/es-ES/preferences.dtd
new file mode 100644
index 0000000..fcc65ea
--- /dev/null
+++ b/locale/es-ES/preferences.dtd
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/preferences.properties b/locale/es-ES/preferences.properties
new file mode 100644
index 0000000..158ef95
--- /dev/null
+++ b/locale/es-ES/preferences.properties
@@ -0,0 +1,18 @@
+title=Preferencias Snowl
+titleWindows=Opciones Snowl
+# Status messages when subscribing
+
+messageConnecting=Conectando...
+messageDuplicate=Ya está suscrito al origen de este mensaje.
+messageInvalid=No se reconoce la ubicación que ha introducido.
+messageInvalidLoginData=Debes introducir un nombre de usuario y contraseña para suscribirse al origen de este mensaje.
+messageConnectionError=Hubo un error conectado con el origen de este mensaje. Por favor compruebe la ubicación y reinténtelo.
+messagePassword=Sus credenciales no fueron aceptadas. Por favor compruebe su nombre de usuario y contraseñas y reinténtelo.
+messageDbBusy=La base de datos está ocupada. Por favor intentelo después de que todas las fuentes hayan terminado.
+messageConnected=Conectado.
+messageGettingMessages=Obteniendo mensajes...
+messageSuccess=Se ha suscrito al origen de este mensaje.
+messageGenericError=Hubo un error completando la suscripción a el origen de este mensaje. Error: %1$S
+# Customize panel
+
+settingsDefaultText=Usar siempre estas por defecto y sobrescribir cualquier configuración personalizada
diff --git a/locale/es-ES/river.dtd b/locale/es-ES/river.dtd
new file mode 100644
index 0000000..96c4ba1
--- /dev/null
+++ b/locale/es-ES/river.dtd
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/river.properties b/locale/es-ES/river.properties
new file mode 100644
index 0000000..a952ce9
--- /dev/null
+++ b/locale/es-ES/river.properties
@@ -0,0 +1,7 @@
+otherTabs=Otras pestañas
+subscriptions=Suscripciones
+# LOCALIZATION NOTE:
+
+# %1$S = the name of the feed
+
+subscribed=¡Has sido suscrito en %1$S en Snowl!
diff --git a/locale/es-ES/search.dtd b/locale/es-ES/search.dtd
new file mode 100644
index 0000000..19cc3ce
--- /dev/null
+++ b/locale/es-ES/search.dtd
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/search.properties b/locale/es-ES/search.properties
new file mode 100644
index 0000000..9590b78
--- /dev/null
+++ b/locale/es-ES/search.properties
@@ -0,0 +1,4 @@
+# LOCALIZATION NOTE emptytext message in List View search box
+
+searchCollectionsEmptyText=Recopilación
+searchMessagesEmptyText=Mensajes
diff --git a/locale/es-ES/sources.dtd b/locale/es-ES/sources.dtd
new file mode 100644
index 0000000..67f3c52
--- /dev/null
+++ b/locale/es-ES/sources.dtd
@@ -0,0 +1 @@
+
diff --git a/locale/es-ES/stream.dtd b/locale/es-ES/stream.dtd
new file mode 100644
index 0000000..3834e7d
--- /dev/null
+++ b/locale/es-ES/stream.dtd
@@ -0,0 +1 @@
+
diff --git a/locale/es-ES/subscribe.properties b/locale/es-ES/subscribe.properties
new file mode 100644
index 0000000..dfa1f9d
--- /dev/null
+++ b/locale/es-ES/subscribe.properties
@@ -0,0 +1,18 @@
+subscribeNow=Suscribir Ahora
+chooseApplicationMenuItem=Elegir Aplicación...
+chooseApplicationDialogTitle=Elegir Aplicación
+alwaysUse=Usar Siempre
+# LOCALIZATION NOTE: The next three strings explains to the user what they're
+
+# doing.
+
+# e.g. alwaysUseForVideoPodcasts : "Always use Miro to subscribe to video podcasts."
+
+# %S = application to use (Miro, iTunes, ...)
+
+alwaysUseForFeeds=Usar siempre %S para suscribirse
+alwaysUseForAudioPodcasts=Usar siempre %S para suscribirse a podcast.
+alwaysUseForVideoPodcasts=Usar siempre %S para suscribirse a podcast.
+subscribeFeedUsing=Suscribir usando
+subscribeAudioPodcastUsing=Suscribir usando
+subscribeVideoPodcastUsing=Suscribir usando
diff --git a/locale/es-ES/toolbar.dtd b/locale/es-ES/toolbar.dtd
new file mode 100644
index 0000000..e6506c6
--- /dev/null
+++ b/locale/es-ES/toolbar.dtd
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/locale/es-ES/utils.properties b/locale/es-ES/utils.properties
new file mode 100644
index 0000000..c3854f5
--- /dev/null
+++ b/locale/es-ES/utils.properties
@@ -0,0 +1,31 @@
+unknownDate=desconocido
+monday=Lunes
+tuesday=Martes
+wednesday=Miércoles
+thursday=Jueves
+friday=Viernes
+saturday=Sábado
+sunday=Domingo
+# LOCALIZATION NOTE (yesterdayTime): %S is the time of day in hours and minutes
+
+# as returned by nsIScriptableDateFormat::FormatTime (f.e. "12:34").
+
+yesterdayTime=Ayer %S
+future=El futuro
+evening=Noche
+afternoon=Tarde
+morning=Mañana
+# LOCALIZATION NOTE (weeHours): Wee hours is a euphemism for the early hours
+
+# of the morning. Snowls uses this expression to describe the hours between
+
+# midnight and six in the morning (i.e. 00:00 - 06:00).
+
+weeHours=Madrugada
+today=Hoy
+yesterday=Ayer
+older=Viejo
+weekOne=Semana Uno
+weekTwo=Semana Dos
+weekThree=Semana Tres
+weekFour=Semana Cuatro
diff --git a/locale/es-ES/write.dtd b/locale/es-ES/write.dtd
new file mode 100644
index 0000000..efea7dc
--- /dev/null
+++ b/locale/es-ES/write.dtd
@@ -0,0 +1 @@
+
diff --git a/locale/es-ES/write.properties b/locale/es-ES/write.properties
new file mode 100644
index 0000000..13e9342
--- /dev/null
+++ b/locale/es-ES/write.properties
@@ -0,0 +1,3 @@
+sendButton.label=Enviar
+sendButton.label.sending=Enviando...
+sendButton.label.sent=Enviado