<!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">
<head>
    <meta name="description" content="The official home page of the Apache OpenOffice open source project, home of OpenOffice Writer, Calc, Impress, Draw and Base." />
    <meta name="keywords" content="OpenOffice, Open Office, Apache OpenOffice, Apache Open Office, OpenOffice.org, Calc, Impress, Draw, Base, ODF, Open Document Format, free office editors" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Apache OpenOffice - The Free and Open Productivity Suite</title>
    <style type="text/css">
    /* <![CDATA[ */
    /*-------------------- Exceptions on standard css -----------------------*/
    @import url("/home.css");
    @import url("/styles.css");
    @import url("/exceptions.css");
    @import url("./rtl.css");
    
/*     @import url("/home.css"); */
/*     @import url("/styles.css"); */
/*     @import url("/exceptions.css"); */
    /* ]]> */
    </style>

    <script>
      function follow(platform) {
        // _gaq.push(['_trackEvent','social', 'followUs', platform]); 
          if (platform == 'Facebook') {
            window.open("https://www.facebook.com/ApacheOO","_blank");
          } else if (platform == 'Twitter') {
            window.open("https://twitter.com/ApacheOO","_blank");
          }  else if (platform == 'ApacheBlog') {
            window.open("https://blogs.apache.org/OOo/","_blank");
          }
      }
    </script>
</head>

<body>

<div id="actionstatements">
  <ul>
    <li>
      <div class="action-info">
        <div class="action-text action-link">
          <h2><a href="./why/">אני רוצה ללמוד על OpenOffice</a></h2>
          <p><a href="./why/">מה זה, ולמה כדאי לי להשתמש בחבילת התוכנה הזו?</a></p>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-download">
        <div class="action-text action-link">
          <h2><a href="./download/">אני רוצה להוריד את OpenOffice</a></h2>
          <p><a href="./download/">הורדה בחינם של Apache OpenOffice, ודרכים שונות להתקנתה.</a></p>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-help">
        <div class="action-text action-link">
          <h2><a href="./support/">עזרה בקשר ל-OpenOffice שלי</a></h2>
          <p><a href="./support/">דרכים שונות לקבלת תמיכה/עזרה.</a></p>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-extend">
        <div class="action-text action-link">
          <h2><a href="./extensions/">אני רוצה לעשות דברים נוספים עם OpenOffice</a></h2>
          <p><a href="./extensions/">הוסף יכולות והרחבות ל-Apache OpenOffice בעזרת תכונות חדשות, תבניות ואיורים.</a></p>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
      <div class="action-participate">
        <div class="action-text action-link">
			<h2><a href="./participate/">אני רוצה לעזור ולהשתתף ב-OpenOffice</a></h2>
          <p><a href="./participate/">
          Apache OpenOffice נוצר על-ידי אנשים מרחבי העולם. כל אחד מוזמן לתרום משהו. נשמח לעזרה בתרגום לעברית, וכן במפתחים שיעזרו לשפר את תאימות התוכנה לעברית.</a></p>
        </div>
      </div>
    </li>
    <li>
      <hr />
    </li>
    <li>
     <div class="action-social">
        <div class="action-text action-link">
          <h2><a href="./social/" onclick="javascript:follow('SocialLink');">איך לקבל עדכונים מ-OpenOffice</a></h2>
          <p><a href="./social/" onclick="javascript:follow('SocialLink');">
          קבלת עדכונים על התקדמות OpenOffice דרך רשימת-תפוצה, רשתות חברתיות, ובלוג.</a></p>
            <div class="action-social-extra">
              <p>
                <span style="padding:0 5px;cursor: pointer; cursor: hand;" onclick="javascript:follow('ApacheBlog');"
                title="Official Blog"><img src="../images/logo-rss-16.png" alt="Official Blog" />
                <a><u>בלוג רשמי</u></a></span>
                <span style="padding:0 5px;cursor: pointer; cursor: hand;" onclick="javascript:follow('Facebook');"
                title="Follow Us on Facebook"><img src="../images/logo-facebook-16.png" alt="Facebook" />
                <a><u>Facebook</u></a></span>
                <span style="padding:0 5px;cursor: pointer; cursor: hand;" onclick="javascript:follow('Twitter');"
                title="Follow Us on Twitter"><img src="../images/logo-twitter-16.png" alt="Twitter" />
                <a><u>Twitter</u></a></span>
              </p>
            </div>
        </div>
      </div>
     </li>
    <li>
      <hr />
    </li>
  </ul>
</div>

<div id="news">

 <div class="campaign">
    <h2>פורסמה Apache OpenOffice 4.1.1</h2>

    <p><em>23/8:</em> גירסה 
    <a href="https://blogs.apache.org/OOo/entry/announcing_apache_openoffice_4_1"
    title="הידיעה הרשמית בבלוג על Apache OpenOffice 4.1.0">Apache OpenOffice 4.1.1</a> זמינה להורדה. 
    <a href="https://cwiki.apache.org/confluence/display/OOOUSERS/AOO+4.1.1+Release+Notes"
    title="הערות עבור Apache OpenOffice 4.1.1">הערות הגירסה</a> 
    מפרטות את השינויים בגירסה זו; 
    בין היתר, כוללת גירסה זו תרגום משופר של מנשק המשתמש.
    <a href="./download/"
    title="הורדת Apache OpenOffice 4.1.1">הורדת הגירסה החדשה</a>.</p>
  </div>
  
 <div class="campaign">
    <h2>דרושים מתרגמים</h2>
      <p>
        <em>18/7:</em> 
        פרויקט תרגום מנשק המשתמש הושלם עם שחרור Apache OpenOffice 4.1, 
        ואנשים מישראל יכולים לעבוד עם  מנשק עברי. כרגע, דרושים מתנדבים להשלמת תרגום מערכת העזרה לעברית.<br/> 
        <a href="./participate/">מידע על התנדבות</a>
        <br/>
      </p>
  </div>

 

  <div class="campaign">
     <h2>מעל 100 מיליון הורדות</h2>

    <p><em>17/4/2014:</em>
    פרויקט Apache OpenOffice מתגאה בכך שחבילת-התוכנות 
    <a href="https://blogs.apache.org/foundation/entry/the_apache_software_foundation_announces56"
    title="הידיעה החגיגית על-כך ש-Apache OpenOffice הורדה 100 מיליון פעמים">הורדה 100 מיליון פעמים</a>.</p>
  </div>

  <div class="campaign">
    <h2>מתנדבים &ndash; לא חובבנים</h2>

    <p><em>8/1/2013:</em>
    Apache OpenOffice מפותחת לגמרי על-ידי מתנדבים. 
    אירגון Apache לא משלם למפתחים, מתרגמים, בודקים, משווקים וכו'. 
    כמובן שנשמח לקבל 
    <a href="https://www.apache.org/foundation/contributing.html">תרומות</a> לאירגון התוכנה Apache, לצורך המשך 
    הפעלת השרתים שלנו ולכיסוי הוצאות נוספות. כל המוצרים שלנו מפותחים לגמרי בידי מתנדבים.

    <p>ולאלו ששואלים <strong>איך תוכנה שמפותחת בידי מתנדבים ומחולקת בחינם יכולה להיות טובה?<br />
    </strong><a href="why/why_volunteers.html">הנה תשובה אפשרית</a>.</p>
  </div>

  <div class="campaign">
    <h2><a href="./news/">עדכונים נוספים</a></h2>
    <h2><a href="https://blogs.apache.org/OOo/">בלוג</a></h2>
  </div>

<!--
  <div id="SupportedAndSupporters">
    <a href="https://validator.w3.org/check?uri=referer"
    title="W3C Markup Validation Service - Check the markup (HTML, XHTML, ...) of Web documents">
    <img src="https://www.w3.org/Icons/valid-xhtml10-blue.png"
    alt="W3C Markup Validation Service - Check the markup (HTML, XHTML, ...) of Web documents"/></a>
  </div>
-->
</div>

</body>
</html>
