<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ast" />
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>Descargues d'Apache OpenOffice - Sitiu oficial</title>
  <script type="text/javascript" src="/download/globalvars.js"></script>
  <script type="text/javascript" src="/download/download.js"></script>
  <script type="text/javascript" src="/download/languages.js"></script>
  <style type="text/css">
  /* <![CDATA[ */
  /*-------------------- Exceptions on standard css -----------------------*/
  @import "/download/styles.css";
  @import "/download/exceptions.css";
  /* ]]> */
  </style>
  <script>
    if (window.document.referrer.indexOf("shell.windows.com") != -1)
       location.href = "/why/why_odf.html";

    function shareFacebook() {
      _gaq.push(['_trackEvent','social', 'shareDownload', 'facebook']); 
      window.open('https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F','_blank','toolbar=0,status=0,width=580,height=325');	
    }
    function shareTwitter(){
      _gaq.push(['_trackEvent','social', 'shareDownload', 'twitter']); 
      window.open('https://twitter.com/intent/tweet?url=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F&text=Join+the+OpenOffice+revolution%2C+the+free+office+productivity+suite+with+over+100+million+trusted+downloads.','_blank','toolbar=0,status=0,width=580,height=325');
    }
    function shareGooglePlus(){
      _gaq.push(['_trackEvent','social', 'shareDownload', 'google+']); 
      window.open('https://plus.google.com/share?url=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F','_blank','toolbar=0,status=0,width=580,height=325');
    }
  </script>
</head>

<body>

<div class="optionset">

  <!-- Green: Stable release -->
  <script type="text/javascript">
  <!--
  // Set a specific language ISO code to force to assemble a certain localized build as download URL
  var NL_LANGUAGE = "ast";
  // Get the download URL
  var LINK        = getLink();

  if ( hasMirrorLink() ) {
    /*
    if ( LINK.toLowerCase().indexOf( "other" ) ) {
      // OS and/or package manager was not recognized, therefore use "other.html" as download link.
      document.write( "<div class=\"first button green\" id=\"optionitem1\" onclick=\"openItem('optionitem1','"
      + LINK + "');" + "return false;\">" );
      document.write( "<h2><a href='" + LINK + "' title='" + LINK + "'>Descargar Apache OpenOffice " + VERSION + "</a></h2>"
      + "<p><a href='" + LINK + "' title='" + LINK + "'>Calque equí pa la versión más nueva pa "
      + "<b>" + UI_PLATFORM + "</b> y <b>" + LANG_ARRAY[ 2 ] + "</b>.</a></p><br />");
    } else {
    */
      // Download directly from a mirror with displayed platform and language.
      document.write( "<div class=\"first button green\" id=\"optionitem1\" onclick=\"openItem('optionitem1','"
      + LINK + "');" + "return false;\">" );
      document.write( "<h2><a href='" + LINK + "' title='Version " + VERSION + " - Milestone " + MILESTONE
      + " - Build ID " + BUILD + " - SVN " + SVN_REV + "'>Descargar Apache OpenOffice " + VERSION + "</a></h2>"
      + "<p><a href='" + LINK + "' title='Version " + VERSION + " - Milestone " + MILESTONE
      + " - Build ID " + BUILD + " - SVN " + SVN_REV + "'>Calque equí pa la versión más nueva pa "
      + "<b>" + UI_PLATFORM + "</b> y <b>" + LANG_ARRAY[ 2 ] + "</b>.</a></p>");
    //  }
  } else {
    // Download from an alternative webpage if hasMirrorLink() == false.
    document.write( "<div class=\"first button green\" id=\"optionitem1\" onclick=\"openItem('optionitem1','"
    + LANG_ARRAY[ 3 ] + "');" + "return false;\">" );
    document.write( "<h2><a href='" + LANG_ARRAY[ 4 ] + "' title='" + LANG_ARRAY[ 4 ] + "'>"
    + "Descargar Apache OpenOffice " + VERSION + "</a></h2>"
    + "<p><a href='" + LANG_ARRAY[ 4 ] + "' title='" + LANG_ARRAY[ 4 ] + "'>Nun ta disponible "
    + "una versión pa <b>" + LANG_ARRAY[ 2 ] + " (" + LANG_ARRAY[ 1 ] + ")</b>. Por favor, "
    + "escueya otra llingua na páxina de descargues alternativa.</a></p>" );
  }
  document.write( "</div>" );

  // Show some helpful links for SDK, source, checksums, release notes, legacy version.
  document.write( "<div class=\"sub-green\">"
    + "<p><a href='/download/other.html' title='Ver toles plataformes, llingües, y paquetes d'idioma pa descargar'>"
    + "<b>Ver toles plataformes, llingües, y paquetes d'idioma</b></a> | "
    + "<a href='/download/other.html#source' title='Ver tolos archivos tar col códigu fonte y SDK pa descargar'>"
    + "<b>Archivos tar de códigu fonte y SDK</b></a> | <br />");
    if ( CHECKSUM_ASC ) {
      document.write( "Firmes y Hashes: "
      + "<a href='" + CHECKSUM_KEYS   + "' + title='KEYS signature'>KEYS</a> , "
      + "<a href='" + CHECKSUM_ASC    + "' + title='ASC signature'>ASC</a> , "
      + "<a href='" + CHECKSUM_MD5    + "' + title='MD5 hash'>MD5</a> , "
      + "<a href='" + CHECKSUM_SHA256 + "' + title='SHA256 hash'>SHA256</a> | ");
    }
    document.write( "<a href='https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=33296031'"
    + "title='¿Qué hai de nuevo y qué ameyoró en Apache OpenOffice " + VERSION + "?'>Notes de llanzamientu</a> | "
    + "<a href='/download/legacy/index.html' title='Baxar la versión antigua OpenOffice.org 3.3.0'>Versión antigua</a></p>"
  + "</div>" );

  entourage.initialize();
  //-->
  </script>

  <!-- Green: Stable release: No JavaScript enabled -->
  <noscript>
  <div class="button green" id="optionitem1" onclick="openItem('optionitem1','other.html'); return false;">
    <h2><a href="/download/other.html" title="Seleicione otres plataformes y llingües pa descargar">
    Descargar Apache OpenOffice</a></h2>
    <p><a href="/download/other.html" title="Seleicione otres plataformes y llingües pa descargar">
    Necesita activar JavaScript pa beneficiase completamente d'esta seición de descargues. Anguaño paez
    que nun ta activáu. Faiga click nesti testu pa usar la páxina web alternativa pa seleicionar
    la plataforma y llingua favorites.</a></p>
  </div>
  <div class="sub-green">
    <p><a href="/download/other.html" title="Ver toles plataformes, llingües y paquetes d'idioma pa descargar">
    <b>Ver toles plataformes, llingües, y paquetes d'idioma</b></a> |
    <a href="/download/other.html#source" title="Ver tolos archivos tar col códigu fonte y SDK pa descargar">
    <b>Archivos tar de códigu fonte y SDK</b></a> | <br />
    <a href="/download/other.html" title="Sumes de comprobación pa Apache OpenOffice">Firmes y Hashes</a> |
    <a href="/development/releases/index.html"
    title="¿Qué hai de nuevo y qué ameyoró en Apache OpenOffice?">Notes de llanzamientu</a> |
    <a href="/download/legacy/index.html" title="Baxar la versión antigua OpenOffice.org 3.3.0">Versión antigua</a></p>
  </div>
  </noscript>

  <!-- Light Blue: Share download with social networks -->
  <div class="button lightblue" id="optionitem2">
    <h2><a style="cursor: default;" title="Ayude a correr la voz y fale a les amistaes sobre Apache OpenOffice">Ayude a correr la voz</a></h2>
    <p style="cursor: default;" id="ShareDownloadLinks">
    <a style="cursor: default;" title="Ayude a correr la voz y fale a les amistaes sobre Apache OpenOffice">Por favor, fale a les amistaes sobre Apache OpenOffice.</a>
    <a style="display: inline; padding: 0 5px 0 30px;" href="javascript:shareFacebook()" title="Por favor, fale a les amistaes sobre Apache OpenOffice per Facebook">
    <img src="/images/logo-facebook-32.png" alt="Por favor, fale a les amistaes sobre Apache OpenOffice per Facebook" /></a>
    <a style="display: inline; padding: 0 5px;" href="javascript:shareTwitter()" title="Por favor, fale a les amistaes sobre Apache OpenOffice per Twitter">
    <img src="/images/logo-twitter-32.png" alt="Por favor, fale a les amistaes sobre Apache OpenOffice per Twitter" /></a>
    <a style="display: inline; padding: 0 5px;" href="javascript:shareGooglePlus()" title="Por favor, fale a les amistaes sobre Apache OpenOffice per Google+">
    <img src="/images/logo-googleplus-32.png" alt="Por favor, fale a les amistaes sobre Apache OpenOffice per Google+" /></a>
    </p>
  </div>

  <!-- Blue: Extensions -->
  <div class="button blue" id="optionitem3" onclick="openItem('optionitem3','http://extensions.openoffice.org');
    return false;">
    <h2><a href="http://extensions.openoffice.org"
    title="Escoyer ente un bon rangu de funciones adicionales ya individuales">Ver estensiones y diccionarios pa Apache OpenOffice</a></h2>
    <p><a href="http://extensions.openoffice.org"
    title="Escoyer ente un bon rangu de funciones adicionales ya individuales">
    Enantar les funciones del so Apache OpenOffice con una creciente biblioteca d'estensiones y diccionarios d'otros usuarios.</a></p>
  </div>

  <!-- Blue: Templates -->
  <div class="button blue" id="optionitem3_1" onclick="openItem('optionitem3_1','http://templates.openoffice.org');
    return false;">
    <h2><a href="http://templates.openoffice.org"
    title="Escoyer ente un bon rangu de documentos adicionales ya individuales">Ver plantíes pa Apache OpenOffice</a></h2>
    <p><a href="http://templates.openoffice.org"
    title="Escoyer ente un bon rangu de documentos adicionales ya individuales">
    Enantar la creatividá col so Apache OpenOffice con una creciente biblioteca de plantíes d'otros usuarios.</a></p>
  </div>
</div>

<div class="additionalinformation">

  <h2>Más información</h2>
  <ul>
    <li><a href="/license.html"
    title="Llicencia Apache OpenOffice">Llicencia</a></li>
    <li><a href="/download/other.html#source"
    title="Pa desendolcadores y usuarios avanzaos: Baxe la fonte pa construir Apache OpenOffice dende cero.">Fonte</a>
    <li><a href="http://wiki.openoffice.org/wiki/Documentation/Building_Guide_AOO"
    title="Pa desendolcadores y usuarios avanzaos: Guía Cómo pa construir Apache OpenOffice dende cero.">Guía de construcción</a></li>
    <li><a href="/stats/index.html"
    title="Descargues y otres estadístiques">Estadístiques de descargues</a></li>
  </ul>

  <h3>Documentación</h3>
  <ul>
    <li><a href="https://cwiki.apache.org/confluence/display/OOOUSERS/Releases"
    title="¿Pa cuándo hai planeaos nuevos llanzamientos?">Plan de llanzamientos actual</a></li>
    <li><a href="http://wiki.services.openoffice.org/wiki/Product_Release"
    title="¿Cuándo se planearon los llanzamientos anteriores?"> Plan de llanzamientos históricu</a></li>
    <li><a href="/development/releases/index.html"
    title="¿Qué hai de nuevo, qué s'ameyoró en Apache OpenOffice?">Notes de llanzamientu</a></li>
    <li><a href="/product/index.html"
    title="Visita guiada a toles aplicaciones d'Apache OpenOffice">Información del productu</a></li>
    <li><a href="/dev_docs/source/sys_reqs_aoo40.html"
    title="Discu: ~300MB llibres - Memoria: &gt;128MB - Procesador: &gt;500MHz - OS: Win, Linux, Mac OS, Solaris, FreeBSD...">Requisitos del sistema</a></li>
    <li><a href="common/instructions.html"
    title="Instrucciones pa instalar Apache OpenOffice en ordenadores con Windows, Linux y Mac OS">Guíes d'instalación</a> y
    <a href="/documentation/index.html"
    title="Manuales del usuariu pal usu cotidianu">Guíes del usuariu</a></li>
    <li><a href="/development/releases/eol.html"
    title="Información de les versiones que llegaron al estáu de Fin de vida">Información de fin de vida</a></li>
    <li><a href="/support/index.html"
    title="Si la información anterior nun respondió la entruga: ¡Sofitu de baldre y de pagu!">Sofitu</a></li>
    <li><a href="/download/common/java.html"
    title="Esplica por qué usar Java y qué ye">Java y Apache OpenOffice</a></li>
    <!--<li><a href="http://java.com/en/download/manual_v6.jsp"
    title="Get the Java Runtime Environment (JRE 1.6)">Get the Java Runtime Environment (JRE 1.6)</a></li>-->
  </ul>

  <h3>Otros recursos</h3>
  <ul>
    <li><a href="http://extensions.openoffice.org/en/search?query=dictionaries"
    title="Amestar más encontu de llingües a Apache OpenOffice">Diccionarios</a></li>
    <li><a href="http://templates.openoffice.org"
    title="Arranque en cabeza con Apache OpenOffice">Plantíes</a></li>
    <li><a href="http://extensions.openoffice.org"
    title="Escueya ente munches más funciones individuales">Estensiones</a></li>
    <li><a href="http://openoffice.apache.org/native-lang.html"
    title="Información y sofitu na so llingua favorita">Llocalizaciones</a></li>
    <li><a href="/download/sdk/index.html"
    title="Pa desendolcadores: Software Development Kit">Software Development Kit (SDK)</a></li>
    <li><a href="/distribution/index.html">FAQ de distribución</a></li>
    <!--
    <li><a href="/distribution/cdrom/iso_download.html"
    title="Download OpenOffice.org as ISO file and burn it yourself on CD-ROM">ISO images</a> and
    <a href="/distribution/cdrom/index.html#cdrom"
    title="If you cannot download OpenOffice.org, order a CD-ROM">Order CD-ROM</a>
    <li><a href="/distribution/mirrors#mirrors"
    title="To get alternative download locations">All Mirror Server</a><br /></li>
    <li><a href="http://www.apache.org/dyn/aoo-closer.cgi/openoffice/"
    title="Download via Apache mirrors">Download via Apache mirrors</a><br /></li>
    -->
    <li><a href="/download/archive.html"
    title="Descargar versiones antigües y archivaes">Versiones antigües y archivaes</a><br /></li>
  </ul>

  <div id="SupportedAndSupporters">
    <p>&nbsp;</p>
    <a href="http://validator.w3.org/check?uri=http://www.openoffice.org/download/index.html"
    title="W3C Markup Validation Service - Compruebe les marques (HTML, XHTML, ...) de documentos Web">
    <img src="/images/valid-xhtml10-blue.png"
    alt="W3C Markup Validation Service - Compruebe les marques (HTML, XHTML, ...) de documentos Web" /></a>
    &nbsp;&nbsp;&nbsp;
  </div>
</div>

</body>
</html>

