Mark strings for translation in templates/zerver

In order to enable internationalization support in Zulip, and to use
Django internationalization tools, all strings in Zulip frontend needs
to be marked for translation.
This commit is contained in:
Ahmed Shibani
2015-11-03 10:37:07 +02:00
committed by Tim Abbott
parent 47d8d784a2
commit 4f29cfee9e
32 changed files with 388 additions and 371 deletions

View File

@@ -1,5 +1,5 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% comment %} {% comment %}
Allow the user to accept the terms, creating an email record of that fact. Allow the user to accept the terms, creating an email record of that fact.
{% endcomment %} {% endcomment %}
@@ -7,24 +7,25 @@ Allow the user to accept the terms, creating an email record of that fact.
{% block for_you %}for {% if company_name %} {{company_name}} {% else %} __________ {% endif %} {% endblock %} {% block for_you %}for {% if company_name %} {{company_name}} {% else %} __________ {% endif %} {% endblock %}
{% block portico_content %} {% block portico_content %}
<p>(Welcome! We think you'll like it here.)</p> <p>({% trans "Welcome! We think you'll like it here" %}.)</p>
<div class="pitch"> <div class="pitch">
<hr/> <hr/>
<p>You're almost there. We just need you to do one last thing.</p> <p>{% trans "You're almost there. We just need you to do one last thing" %}.</p>
<h3>Accept the Zulip terms of service</h3> <h3>{% trans "Accept the Zulip terms of service" %}</h3>
</div> </div>
<form method="post" class="form-horizontal" id="registration" action="{% url 'zerver.views.accounts_accept_terms' %}"> <form method="post" class="form-horizontal" id="registration" action="{% url 'zerver.views.accounts_accept_terms' %}">
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
<label for="id_email" class="control-label">Email</label> <label for="id_email" class="control-label">{% trans "Email" %}</label>
<div class="controls fakecontrol"> <div class="controls fakecontrol">
<p>{{ email }}</p> <p>{{ email }}</p>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label for="id_full_name" class="control-label">Your name</label> <label for="id_full_name" class="control-label">{% trans "Your name" %}</label>
<div class="controls"> <div class="controls">
<input id="id_full_name" class="required" type="text" name="full_name" <input id="id_full_name" class="required" type="text" name="full_name"
value="{% if form.full_name.value %}{{ form.full_name.value }}{% endif %}" value="{% if form.full_name.value %}{{ form.full_name.value }}{% endif %}"
@@ -50,7 +51,7 @@ Allow the user to accept the terms, creating an email record of that fact.
{% endcomment %} {% endcomment %}
<input id="id_terms" class="required" type="checkbox" name="terms" <input id="id_terms" class="required" type="checkbox" name="terms"
{% if form.terms.value %}checked="checked"{% endif %} /> {% if form.terms.value %}checked="checked"{% endif %} />
I agree to the <a href="/terms">Terms of Service</a>. {% trans "I agree to the" %} <a href="/terms">{% trans "Terms of Service" %}</a>.
</label> </label>
{% if form.terms.errors %} {% if form.terms.errors %}
{% for error in form.terms.errors %} {% for error in form.terms.errors %}

View File

@@ -1,5 +1,5 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{# Home page for not logged-in users. #} {# Home page for not logged-in users. #}
{# This is where we pitch the app and solicit signups. #} {# This is where we pitch the app and solicit signups. #}
@@ -16,14 +16,14 @@ $(function () {
<div class="register-form"> <div class="register-form">
<p class="lead"> <p class="lead">
<div class="register-page-header">Let's get started…</div> <div class="register-page-header">{% trans "Let's get started" %}</div>
</p> </p>
<form class="form-inline" id="send_confirm" name="email_form" <form class="form-inline" id="send_confirm" name="email_form"
action="{{ current_url }}" method="post"> action="{{ current_url }}" method="post">
{% csrf_token %} {% csrf_token %}
<input type="text" class="email required" placeholder="Enter your work email address" <input type="text" class="email required" placeholder="{% trans "Enter your work email address" %}"
id="email" name="email"/> id="email" name="email"/>
<input type="submit" class="btn btn-primary btn-large register-button" value="Sign up"/> <input type="submit" class="btn btn-primary btn-large register-button" value="{% trans "Sign up" %}"/>
</form> </form>
<div id="errors"></div> <div id="errors"></div>
{% if form.email.errors %} {% if form.email.errors %}
@@ -32,11 +32,11 @@ $(function () {
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<div class="alert alert-pitch" id="company-email">Please use your <div class="alert alert-pitch" id="company-email">{% blocktrans %}Please use your
company email address to sign up. Otherwise, we wont be able to company email address to sign up. Otherwise, we wont be able to
connect you with your coworkers.</div> connect you with your coworkers{% endblocktrans %}.</div>
<div class="register-google"> <div class="register-google">
<a href="{% url 'zerver.views.start_google_oauth2' %}" class="zocial google register-google-button">Sign up with Google</a> <a href="{% url 'zerver.views.start_google_oauth2' %}" class="zocial google register-google-button">{% trans "Sign up with Google" %}</a>
</div> </div>
</div> </div>

View File

@@ -1,15 +1,15 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{# Displayed after a user attempts to sign up. #} {# Displayed after a user attempts to sign up. #}
{% block portico_content %} {% block portico_content %}
<div class="app portico-page"> <div class="app portico-page">
<div class="app-main portico-page-container"> <div class="app-main portico-page-container">
<h2>Thanks for signing up!</h2> <h2>{% trans "Thanks for signing up!" %}</h2>
<p class="lead">Check your email so we can get started.</p> <p class="lead">{% trans "Check your email so we can get started" %}.</p>
<p>Still no email? We can <a href="#" id="resend_email_link">resend it</a>.<br/> <p>{% blocktrans %}Still no email? We can <a href="#" id="resend_email_link">resend it</a>{% endblocktrans %}.<br/>
<small>(Just in case, take a look at your Spam folder.)</small></p> <small>({% trans "Just in case, take a look at your Spam folder" %}.)</small></p>
<form id="resend_confirm" action="/accounts/home/" method="post" style="position: absolute;"> <form id="resend_confirm" action="/accounts/home/" method="post" style="position: absolute;">
{% csrf_token %} {% csrf_token %}
<input type="hidden" class="email" id="email" value="{{ email }}" name="email"/>&nbsp; <input type="hidden" class="email" id="email" value="{{ email }}" name="email"/>&nbsp;

View File

@@ -1,12 +1,12 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{# API information page #} {# API information page #}
{% block portico_content %} {% block portico_content %}
<div class="apps-page-header">Do&nbsp;we&nbsp;have&nbsp;apps? App&#8209;solutely.</div> <div class="apps-page-header">{% blocktrans %}Do we have apps? Appsolutely.{% endblocktrans %}</div>
<div class="apps-muted">Ok, I take it back, I'm sorry, please don't go.</div> <div class="apps-muted">{% blocktrans %}Ok, I take it back, I'm sorry, please don't go.{% endblocktrans %}</div>
<h3 class="apps-instructions-header">Installation instructions</h3> <h3 class="apps-instructions-header">{% blocktrans %}Installation instructions{% endblocktrans %}</h3>
<ul class="nav nav-tabs" id="apps-tabs"> <ul class="nav nav-tabs" id="apps-tabs">
{% if not_voyager %} {% if not_voyager %}
<li class="active"><a href="#android" data-toggle="tab">Android</a></li> <li class="active"><a href="#android" data-toggle="tab">Android</a></li>
@@ -23,10 +23,10 @@
<div class="tab-pane active" id="android"> <div class="tab-pane active" id="android">
<img class="screenshot android-screenshot pull-left" src="/static/images/app-screenshots/zulip-android.png" alt="screenshot of the Zulip app on Android" /> <img class="screenshot android-screenshot pull-left" src="/static/images/app-screenshots/zulip-android.png" alt="screenshot of the Zulip app on Android" />
<p>Zulip has a free, <strong>100% native app</strong> for Android, <p>{% blocktrans %}Zulip has a free, <strong>100% native app</strong> for Android,
and you can easily grab it from and you can easily grab it from
the <a href="https://play.google.com/store/apps/details?id=com.zulip.android">Google the <a href="https://play.google.com/store/apps/details?id=com.zulip.android">Google
Play Store</a>.</p> Play Store</a>{% endblocktrans %}.</p>
<a href="https://play.google.com/store/apps/details?id=com.zulip.android"> <a href="https://play.google.com/store/apps/details?id=com.zulip.android">
<img alt="Get it on Google Play" <img alt="Get it on Google Play"
@@ -37,9 +37,9 @@
<div class="tab-pane" id="iphone"> <div class="tab-pane" id="iphone">
<img class="screenshot iphone-screenshot pull-left" src="/static/images/app-screenshots/zulip-iphone.png" alt="screenshot of the Zulip app on iOS" /> <img class="screenshot iphone-screenshot pull-left" src="/static/images/app-screenshots/zulip-iphone.png" alt="screenshot of the Zulip app on iOS" />
<p>Zulip has a free, <strong>100% native app</strong> for iPhone and <p>{% blocktrans %}Zulip has a free, <strong>100% native app</strong> for iPhone and
iPad. Please grab it from iPad. Please grab it from
the <a href="http://itunes.com/apps/zulip">App Store</a>!</p> the <a href="http://itunes.com/apps/zulip">App Store</a>{% endblocktrans %}!</p>
<a href="http://itunes.com/apps/zulip"> <a href="http://itunes.com/apps/zulip">
<img alt="Get it in the App Store" src="/static/images/app-screenshots/ios_badge.png" alt="Apple App Store icon for Zulip" /> <img alt="Get it in the App Store" src="/static/images/app-screenshots/ios_badge.png" alt="Apple App Store icon for Zulip" />
@@ -48,16 +48,16 @@
</div> </div>
{% endif %} {% endif %}
<div class="tab-pane" id="mac"> <div class="tab-pane" id="mac">
<p>You love your Mac. And you love Zulip. So what could be <p>{% blocktrans %}You love your Mac. And you love Zulip. So what could be
better than a Zulip app for Mac? Enjoy notifications for better than a Zulip app for Mac? Enjoy notifications for
messages and PMs in your dock whether you're in Sublime, messages and PMs in your dock whether you're in Sublime,
emacs, or Photoshop.</p> emacs, or Photoshop.{% endblocktrans %}</p>
<p style="text-align: center"> <p style="text-align: center">
{% if not_voyager %} {% if not_voyager %}
<a href="https://zulip.com/dist/apps/mac/Zulip-latest.dmg" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> Download Zulip for Mac</a> <a href="https://zulip.com/dist/apps/mac/Zulip-latest.dmg" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> {% blocktrans %}Download Zulip for Mac{% endblocktrans %}</a>
{% else %} {% else %}
<a href="https://zulip.com/dist/apps/sso/mac/Zulip-latest.dmg" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> Download Zulip for Mac</a> <a href="https://zulip.com/dist/apps/sso/mac/Zulip-latest.dmg" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> {% blocktrans %}Download Zulip for Mac{% endblocktrans %}</a>
{% endif %} {% endif %}
</p> </p>
@@ -65,12 +65,12 @@
</div> </div>
<div class="tab-pane" id="linux"> <div class="tab-pane" id="linux">
<p>Zulip provides a native Linux app that runs standalone <p>{% blocktrans %}Zulip provides a native Linux app that runs standalone
outside of your browser. How you install it depends on what outside of your browser. How you install it depends on what
you're running:</p> you're running:{% endblocktrans %}</p>
<h3>Debian and Ubuntu</h3> <h3>{% blocktrans %}Debian and Ubuntu{% endblocktrans %}</h3>
We have an APT repository for Zulip, so adding and installing the app is easy: {% blocktrans %}We have an APT repository for Zulip, so adding and installing the app is easy:{% endblocktrans %}
<div class="codehilite"><pre>wget https://zulip.com/dist/keys/user-apt.asc <div class="codehilite"><pre>wget https://zulip.com/dist/keys/user-apt.asc
cat user-apt.asc | sudo apt-key add - cat user-apt.asc | sudo apt-key add -
sudo apt-add-repository http://apt.zulip.com/user/ sudo apt-add-repository http://apt.zulip.com/user/
@@ -83,29 +83,29 @@ sudo apt-get install zulip-desktop-sso
<h3>Other</h3> <h3>{% trans "Other" %}</h3>
{% if not_voyager %} {% if not_voyager %}
<p>We provide a <a href="https://zulip.com/dist/apps/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems. <p>{% blocktrans %}We provide a <a href="https://zulip.com/dist/apps/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems.{% endblocktrans %}
</p> </p>
{% else %} {% else %}
<p>We provide a <a href="https://zulip.com/dist/apps/sso/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems. <p>{% blocktrans %}We provide a <a href="https://zulip.com/dist/apps/sso/linux/zulip-desktop_latest.bin.tar.gz">binary tarball</a> of the Zulip application, built for 64-bit systems.{% endblocktrans %}
</p> </p>
{% endif %} {% endif %}
</div> </div>
<div class="tab-pane" id="windows"> <div class="tab-pane" id="windows">
<p>Windows. It's the best OS for your needs: gaming, <p>{% blocktrans %}Windows. It's the best OS for your needs: gaming,
coding, expense reports. But you always felt that something coding, expense reports. But you always felt that something
was missing... until now.</p> was missing... until now.{% endblocktrans %}</p>
<p>We proudly present <b>Zulip for Windows</b>: the second-best app for Windows on the market today (after <p>{% blocktrans %}We proudly present <b>Zulip for Windows</b>: the second-best app for Windows on the market today (after
Solitaire, obviously.)</p> Solitaire, obviously.){% endblocktrans %}</p>
<p style="text-align: center"> <p style="text-align: center">
{% if not_voyager %} {% if not_voyager %}
<a href="https://zulip.com/dist/apps/win/zulip-latest.exe" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> Download Zulip for Windows</a> <a href="https://zulip.com/dist/apps/win/zulip-latest.exe" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> {% blocktrans %}Download Zulip for Windows{% endblocktrans %}</a>
{% else %} {% else %}
<a href="https://zulip.com/dist/apps/sso/win/zulip-latest.exe" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> Download Zulip for Windows</a> <a href="https://zulip.com/dist/apps/sso/win/zulip-latest.exe" class="btn btn-large btn-primary btn-app-download"><i class="icon-vector-download"></i> {% blocktrans %}Download Zulip for Windows{% endblocktrans %}</a>
{% endif %} {% endif %}
</p> </p>
@@ -113,10 +113,10 @@ sudo apt-get install zulip-desktop-sso
</div> </div>
<div class="tab-pane" id="plan9"> <div class="tab-pane" id="plan9">
<p>First, connect to our hosted 9P filesystem <p>{% blocktrans %}First, connect to our hosted 9P filesystem
at <code>plan9.zulip.com</code> and then... no, we're at <code>plan9.zulip.com</code> and then... no, we're
totally kidding. There definitely isn't a version of Zulip totally kidding. There definitely isn't a version of Zulip
for Plan 9.</p> for Plan 9.{% endblocktrans %}</p>
</div> </div>

View File

@@ -1,17 +1,18 @@
{% load i18n %}
<div class="modal hide" id="bankruptcy" tabindex="-1" role="dialog" <div class="modal hide" id="bankruptcy" tabindex="-1" role="dialog"
aria-labelledby="bankruptcy-label" aria-hidden="true"> aria-labelledby="bankruptcy-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="bankruptcy-label">Welcome back</h3> <h3 id="bankruptcy-label">{% trans 'Welcome back' %}</h3>
</div> </div>
<div id="bankruptcy-unread-count"></div> <div id="bankruptcy-unread-count"></div>
<div class="modal-footer"> <div class="modal-footer">
<button id="yes-bankrupt" class="bankruptcy_button btn btn-primary" <button id="yes-bankrupt" class="bankruptcy_button btn btn-primary"
aria-hidden="true">Yes, please!</button> aria-hidden="true">{% trans 'Yes, please!' %}</button>
<button id="no-bankrupt" class="bankruptcy_button btn btn-default" <button id="no-bankrupt" class="bankruptcy_button btn btn-default"
data-dismiss="modal" aria-hidden="true">No, I'll catch up.</button> data-dismiss="modal" aria-hidden="true">{% trans "No, I'll catch up" %}.</button>
</div> </div>
</div> </div>

View File

@@ -1,11 +1,11 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h3>Closed realm</h3> <h3>{% trans 'Closed realm' %}</h3>
<p>Hi there! Thank you for your interest in Zulip.</p> <p>{% trans 'Hi there! Thank you for your interest in Zulip' %}.</p>
<p>The organization you are trying to join, {{ closed_domain_name }}, only allows users with e-mail addresses within the organization. Please ask for a new invite to an appropriate e-mail address.</p> <p>{% blocktrans %}The organization you are trying to join, {{ closed_domain_name }}, only allows users with e-mail addresses within the organization. Please ask for a new invite to an appropriate e-mail address{% endblocktrans %}.</p>
{% endblock %} {% endblock %}

View File

@@ -1,3 +1,4 @@
{% load i18n %}
<div id="compose"> <div id="compose">
<div id="compose-notifications" class="notifications above-composebox"> <div id="compose-notifications" class="notifications above-composebox">
</div> </div>
@@ -7,14 +8,14 @@
<span class="new_message_button"> <span class="new_message_button">
<button type="button" class="btn btn-default btn-large compose_stream_button" <button type="button" class="btn btn-default btn-large compose_stream_button"
id="left_bar_compose_stream_button_big" title="New stream message (c)"> id="left_bar_compose_stream_button_big" title="New stream message (c)">
<i class="icon-vector-bullhorn"></i><span class="compose_stream_button_label">&nbsp;&nbsp;New stream message</span> <i class="icon-vector-bullhorn"></i><span class="compose_stream_button_label">&nbsp;&nbsp;{% trans 'New stream message' %}</span>
</button> </button>
</span> </span>
{% if not embedded %} {% if not embedded %}
<span class="new_message_button"> <span class="new_message_button">
<button type="button" class="btn btn-default btn-large compose_private_button" <button type="button" class="btn btn-default btn-large compose_private_button"
id="left_bar_compose_private_button_big" title="New private message (C)"> id="left_bar_compose_private_button_big" title="New private message (C)">
<i class="icon-vector-user"></i><span class="compose_private_button_label">&nbsp;&nbsp;New private message</span> <i class="icon-vector-user"></i><span class="compose_private_button_label">&nbsp;&nbsp;{% trans 'New private message' %}</span>
</button> </button>
</span> </span>
{% endif %} {% endif %}
@@ -43,15 +44,15 @@
</td> </td>
<td class="right_part"> <td class="right_part">
<span id="compose-lock-icon"> <span id="compose-lock-icon">
<i class="icon-vector-lock" title="This is an invite-only stream"></i> <i class="icon-vector-lock" title="{% trans 'This is an invite-only stream' %}"></i>
</span> </span>
<input type="text" class="recipient_box" name="stream" id="stream" <input type="text" class="recipient_box" name="stream" id="stream"
maxlength="30" maxlength="30"
value="" placeholder="Stream" autocomplete="off" tabindex="120"/> value="" placeholder="{% trans 'Stream' %}" autocomplete="off" tabindex="120"/>
<i class="icon-vector-narrow icon-vector-small"></i> <i class="icon-vector-narrow icon-vector-small"></i>
<input type="text" class="recipient_box" name="subject" id="subject" <input type="text" class="recipient_box" name="subject" id="subject"
maxlength="60" maxlength="60"
value="" placeholder="Topic" autocomplete="off" tabindex="130"/> value="" placeholder="{% trans 'Topic' %}" autocomplete="off" tabindex="130"/>
</td> </td>
</tr> </tr>
<tr id="private-message"> <tr id="private-message">
@@ -60,28 +61,28 @@
</td> </td>
<td class="right_part"> <td class="right_part">
<div class="pm_recipient"> <div class="pm_recipient">
<span class="you_text">You and</span> <span class="you_text">{% trans 'You and' %}</span>
<input type="text" class="recipient_box" name="recipient" id="private_message_recipient" <input type="text" class="recipient_box" name="recipient" id="private_message_recipient"
value="" placeholder="one or more people..." autocomplete="off" tabindex="130"/> value="" placeholder="{% trans 'one or more people' %}..." autocomplete="off" tabindex="130"/>
</div> </div>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="messagebox" colspan="2"> <td class="messagebox" colspan="2">
<textarea class="new_message_textarea" name="content" id="new_message_content" <textarea class="new_message_textarea" name="content" id="new_message_content"
value="" placeholder="Compose your message here..." tabindex="140" maxlength="10000"></textarea> value="" placeholder="{% trans 'Compose your message here' %}..." tabindex="140" maxlength="10000"></textarea>
<div id="below-compose-content"> <div id="below-compose-content">
<input type="file" id="file_input" class="notvisible pull-left" multiple /> <input type="file" id="file_input" class="notvisible pull-left" multiple />
<a class="message-control-button icon-vector-dropbox notdisplayed" <a class="message-control-button icon-vector-dropbox notdisplayed"
id="attach_dropbox_files" href="#" title="Attach files from Dropbox"></a> id="attach_dropbox_files" href="#" title="{% trans 'Attach files from Dropbox' %}"></a>
<a class="message-control-button icon-vector-paper-clip notdisplayed" <a class="message-control-button icon-vector-paper-clip notdisplayed"
id="attach_files" href="#" title="Attach files"></a> id="attach_files" href="#" title="{% trans 'Attach files' %}"></a>
<a class="message-control-button icon-vector-font" <a class="message-control-button icon-vector-font"
href="#markdown-help" title="Formatting" data-toggle="modal"></a> href="#markdown-help" title="Formatting" data-toggle="modal"></a>
<a id="restore-draft" onclick="compose.restore_message();">Restore draft</a> <a id="restore-draft" onclick="compose.restore_message();">{% trans 'Restore draft' %}</a>
<span id="sending-indicator">Sending...</span> <span id="sending-indicator">{% trans 'Sending' %}...</span>
<div id="send_controls"> <div id="send_controls">
<label id="enter-sends-label" class="compose_checkbox_label" for="enter_sends">Press Enter to send&nbsp;</label> <label id="enter-sends-label" class="compose_checkbox_label" for="enter_sends">{% trans 'Press Enter to send' %}&nbsp;</label>
<input type="checkbox" id="enter_sends" name="enter_sends" value="enter_sends" /> <input type="checkbox" id="enter_sends" name="enter_sends" value="enter_sends" />
<input type="submit" value="Send" id="compose-send-button" class="btn btn-primary send_message" tabindex="150"/> <input type="submit" value="Send" id="compose-send-button" class="btn btn-primary send_message" tabindex="150"/>
</div> </div>

View File

@@ -1,14 +1,14 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h3>Deactivated organization</h3> <h3>{% trans 'Deactivated organization' %}</h3>
<p>Hi there! Thank you for your interest in Zulip.</p> <p>{% trans 'Hi there! Thank you for your interest in Zulip' %}.</p>
<p>The organization you are trying to join, {{ deactivated_domain_name }}, has <p>{% blocktrans %} The organization you are trying to join, {{ deactivated_domain_name }}, has
been deactivated. Please been deactivated. Please
contact <a href="mailto:{{ zulip_administrator }}">{{ zulip_administrator }}</a> to reactivate contact <a href="mailto:{{ zulip_administrator }}">{{ zulip_administrator }}</a> to reactivate
this group.</p> this group{% endblocktrans %}.</p>
{% endblock %} {% endblock %}

View File

@@ -1,150 +1,151 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<div class="feature-page-header">Zulip Features</div> <div class="feature-page-header">{% blocktrans %}Zulip Features{% endblocktrans %}</div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-random icon-vector-3x feature-icon"></i> <i class="icon-vector-random icon-vector-3x feature-icon"></i>
<h4>Threaded group conversations</h4> <h4>{% blocktrans %}Threaded group conversations{% endblocktrans %}</h4>
<p>Talk about multiple topics at once without getting lost or <p>{% blocktrans %}Talk about multiple topics at once without getting lost or
overwhelmed.</p> overwhelmed.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-comments icon-vector-3x feature-icon"></i> <i class="icon-vector-comments icon-vector-3x feature-icon"></i>
<h4>One-on-one and group private conversations</h4> <h4>{% blocktrans %}One-on-one and group private conversations{% endblocktrans %}</h4>
<p>Have private conversations with one or as many people as you need.</p> <p>{% blocktrans %}Have private conversations with one or as many people as you need.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-home icon-vector-3x feature-icon"></i> <i class="icon-vector-home icon-vector-3x feature-icon"></i>
<h4>Persistence</h4> <h4>{% trans "Persistence" %}</h4>
<p>We're always receiving messages for you, even when you're <p>{% blocktrans %}We're always receiving messages for you, even when you're
logged out.</p> logged out.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-road icon-vector-3x feature-icon"></i> <i class="icon-vector-road icon-vector-3x feature-icon"></i>
<h4>History</h4> <h4>{% trans "History" %}</h4>
<p>Join a stream and see its history, so even new team <p>{% blocktrans %}Join a stream and see its history, so even new team
members are never out of the loop.</p> members are never out of the loop.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-search icon-vector-3x feature-icon"></i> <i class="icon-vector-search icon-vector-3x feature-icon"></i>
<h4>Full-history search</h4> <h4>{% blocktrans %}Full-history search{% endblocktrans %}</h4>
<p>Search is both snappy and smart, helping you look for text, <p>{% blocktrans %}Search is both snappy and smart, helping you look for text,
people, and threads of conversation, with advanced search people, and threads of conversation, with advanced search
operators for fine-grained control.</p> operators for fine-grained control.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-group icon-vector-3x feature-icon"></i> <i class="icon-vector-group icon-vector-3x feature-icon"></i>
<h4>Team presence and buddy list</h4> <h4>{% blocktrans %}Team presence and buddy list{% endblocktrans %}</h4>
<p>See who is online at a glance.</p> <p>{% blocktrans %}See who is online at a glance.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-picture icon-vector-3x feature-icon"></i> <i class="icon-vector-picture icon-vector-3x feature-icon"></i>
<h4>Inline image, video, and tweet previews</h4> <h4>{% blocktrans %}Inline image, video, and tweet previews{% endblocktrans %}</h4>
<p>Send a link and we'll automatically generate an inline <p>{% blocktrans %}Send a link and we'll automatically generate an inline
preview.</p> preview.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-paper-clip icon-vector-3x feature-icon"></i> <i class="icon-vector-paper-clip icon-vector-3x feature-icon"></i>
<h4>Drag-and-drop file uploads</h4> <h4>{% blocktrans %}Drag-and-drop file uploads{% endblocktrans %}</h4>
<p>Drag a file into the compose box and we'll upload and <p>{% blocktrans %}Drag a file into the compose box and we'll upload and
preview it for you. Sharing and discussing work with team preview it for you. Sharing and discussing work with team
mates has never been easier.</p> mates has never been easier.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-user icon-vector-3x feature-icon"></i> <i class="icon-vector-user icon-vector-3x feature-icon"></i>
<h4>@-notifications</h4> <h4>{% trans "@-notifications" %}</h4>
<p>Want someone's attention in a conversation? @-notify them <p>{% blocktrans %}Want someone's attention in a conversation? @-notify them
and they'll be right over.</p> and they'll be right over.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-bullhorn icon-vector-3x feature-icon"></i> <i class="icon-vector-bullhorn icon-vector-3x feature-icon"></i>
<h4>Stream-wide announcements</h4> <h4>{% blocktrans %}Stream-wide announcements{% endblocktrans %}</h4>
<p>Use <code>@all</code> or <code>@everyone</code> to get the <p>{% blocktrans %}Use <code>@all</code> or <code>@everyone</code> to get the
attention of everyone in a stream.</p> attention of everyone in a stream.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-envelope icon-vector-3x feature-icon"></i> <i class="icon-vector-envelope icon-vector-3x feature-icon"></i>
<h4>Emails for important missed messages</h4> <h4>{% blocktrans %}Emails for important missed messages{% endblocktrans %}</h4>
<p>If you're missing important conversations when you're away from <p>{% blocktrans %}If you're missing important conversations when you're away from
Zulip, we'll send you an email summary so you're always in the Zulip, we'll send you an email summary so you're always in the
loop.</p> loop.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-info-sign icon-vector-3x feature-icon"></i> <i class="icon-vector-info-sign icon-vector-3x feature-icon"></i>
<h4>Desktop notifications</h4> <h4>{% blocktrans %}Desktop notifications{% endblocktrans %}</h4>
<p>Configurable for private and stream messages.</p> <p>{% blocktrans %}Configurable for private and stream messages.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-bell icon-vector-3x feature-icon"></i> <i class="icon-vector-bell icon-vector-3x feature-icon"></i>
<h4>Audible notifications</h4> <h4>{% blocktrans %}Audible notifications{% endblocktrans %}</h4>
<p>So you don't miss important messages even when your eyes <p>{% blocktrans %}So you don't miss important messages even when your eyes
are elsewhere.</p> are elsewhere.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-font icon-vector-3x feature-icon"></i> <i class="icon-vector-font icon-vector-3x feature-icon"></i>
<h4>Hotkeys</h4> <h4>{% trans "Hotkeys" %}</h4>
<p>Communicate as efficiently as you use your favorite text editor.</p> <p>{% blocktrans %}Communicate as efficiently as you use your favorite text editor.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-thumbs-up icon-vector-3x feature-icon"></i> <i class="icon-vector-thumbs-up icon-vector-3x feature-icon"></i>
<h4>Emoji</h4> <h4>{% trans "Emoji" %}</h4>
<p>Sometimes it's the simple things in life, like being able <p>{% blocktrans %}Sometimes it's the simple things in life, like being able
to give a <tt>:thumbsup:</tt> while chatting.</p> to give a <tt>:thumbsup:</tt> while chatting.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-edit icon-vector-3x feature-icon"></i> <i class="icon-vector-edit icon-vector-3x feature-icon"></i>
<h4>Code</h4> <h4>{% trans "Code" %}</h4>
<p>Discuss code, even multi-line code, with ease, including <p>{% blocktrans %}Discuss code, even multi-line code, with ease, including
syntax-highlighting.</p> syntax-highlighting.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-quote-left icon-vector-3x feature-icon"></i> <i class="icon-vector-quote-left icon-vector-3x feature-icon"></i>
<h4>Lightweight markup</h4> <h4>{% blocktrans %}Lightweight markup{% endblocktrans %}</h4>
<p>Get bulleted lists, clickable links, and nicely-formatted <p>{% blocktrans %}Get bulleted lists, clickable links, and nicely-formatted
e-mail pastes automatically.</p> e-mail pastes automatically.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-eraser icon-vector-3x feature-icon"></i> <i class="icon-vector-eraser icon-vector-3x feature-icon"></i>
<h4>Message editing</h4> <h4>{% blocktrans %}Message editing{% endblocktrans %}</h4>
<p>Don't worry, you can always fix that typo.</p> <p>{% blocktrans %}Don't worry, you can always fix that typo.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-lock icon-vector-3x feature-icon"></i> <i class="icon-vector-lock icon-vector-3x feature-icon"></i>
<h4>Invite-only streams</h4> <h4>{% blocktrans %}Invite-only streams{% endblocktrans %}</h4>
<p>Enjoy the benefits of threaded conversations while <p>{% blocktrans %}Enjoy the benefits of threaded conversations while
controlling your audience and privacy.</p> controlling your audience and privacy.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-star-empty icon-vector-3x feature-icon"></i> <i class="icon-vector-star-empty icon-vector-3x feature-icon"></i>
<h4>Starred messages</h4> <h4>{% blocktrans %}Starred messages{% endblocktrans %}</h4>
<p>Keep a todo list or keep track of interesting <p>{% blocktrans %}Keep a todo list or keep track of interesting
conversations.</p> conversations.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-github icon-vector-3x feature-icon"></i> <i class="icon-vector-github icon-vector-3x feature-icon"></i>
<h4>Integrations</h4> <h4>{% trans "Integrations" %}</h4>
<p>Get alerts and updates from your favorite services with <p>{% blocktrans %}Get alerts and updates from your favorite services with
off-the-shelf <a href="/integrations">integrations</a> for off-the-shelf <a href="/integrations">integrations</a> for
Trac, Nagios, Github, Jenkins, and more.</p> Trac, Nagios, Github, Jenkins, and more.{% endblocktrans %}</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-sitemap icon-vector-3x feature-icon"></i> <i class="icon-vector-sitemap icon-vector-3x feature-icon"></i>
<h4>API</h4> <h4>{% trans "API" %}</h4>
<p>Want to roll your own notifications? We've got a <p>{% blocktrans %}Want to roll your own notifications? We've got a
dead-simple RESTful <a href="/api">API and Python bindings</a> dead-simple RESTful <a href="/api">API and Python bindings</a>
that will make integrations&mdash;both sending and that will make integrations&mdash;both sending and
receiving&mdash;a snap!</p> receiving&mdash;a snap!{% endblocktrans %}</p>
</div> </div>
<div class="feature-block left"> <div class="feature-block left">
<i class="icon-vector-mobile-phone icon-vector-3x feature-icon"></i> <i class="icon-vector-mobile-phone icon-vector-3x feature-icon"></i>
<h4>Mobile apps</h4> <h4>{% blocktrans %}Mobile apps{% endblocktrans %}</h4>
<p>Check Zulip on the go with native <a href="/apps">iOS and <p>{% blocktrans %}Check Zulip on the go with native <a href="/apps">iOS and
Android apps</a>.</p> Android apps</a>{% endblocktrans %}.</p>
</div> </div>
<div class="feature-block"> <div class="feature-block">
<i class="icon-vector-desktop icon-vector-3x feature-icon"></i> <i class="icon-vector-desktop icon-vector-3x feature-icon"></i>
<h4>Desktop apps</h4> <h4>{% blocktrans %}Desktop apps{% endblocktrans %}</h4>
<p>Prefer Zulip in its own window and rich, OS-level notifications? <p>{% blocktrans %}Prefer Zulip in its own window and rich, OS-level notifications?
Enjoy <a href="/apps">Zulip on your desktop</a>.</p> Enjoy <a href="/apps">Zulip on your desktop</a>{% endblocktrans %}.</p>
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -1,4 +1,5 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block hello_page_container %} hello-main{% endblock %} {% block hello_page_container %} hello-main{% endblock %}
{% block hello_page_footer %} hello-footer{% endblock %} {% block hello_page_footer %} hello-footer{% endblock %}
{% block os_announcement %} {% block os_announcement %}
@@ -7,10 +8,10 @@
<img src="/static/images/logo/zballoon.png" class="os-illustration" alt="Zulip balloon" /> <img src="/static/images/logo/zballoon.png" class="os-illustration" alt="Zulip balloon" />
<div class="main-headline-text"> <div class="main-headline-text">
<span class="tagline os-tagline"> <span class="tagline os-tagline">
Zulip has been released as open source software! {% trans 'Zulip has been released as open source software!' %}
</span> </span>
<span class="footnote os-footnote"> <span class="footnote os-footnote">
Read the <a href="https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project" target="_blank">announcement</a> or go to <a href="https://www.zulip.org" target="_blank">the Zulip open source project website</a>. {% blocktrans %}Read the <a href="https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project" target="_blank">announcement</a> or go to <a href="https://www.zulip.org" target="_blank">the Zulip open source project website</a>.{% endblocktrans %}
</span> </span>
</div> </div>
</div> </div>
@@ -23,14 +24,14 @@
<img src="/static/images/logo/textlogo@2x.png" class="main-headline-logo" alt="Zulip logo" /> <img src="/static/images/logo/textlogo@2x.png" class="main-headline-logo" alt="Zulip logo" />
<div class="main-headline-text"> <div class="main-headline-text">
<span class="tagline"> <span class="tagline">
Finally, workplace chat that actually improves your productivity.* {% trans 'Finally, workplace chat that actually improves your productivity.*' %}
</span> </span>
<span class="footnote">* It's also great for sharing cat pictures.</span> <span class="footnote">{% trans "* It's also great for sharing cat pictures" %}.</span>
{% if not_voyager %} {% if not_voyager %}
{% elif only_sso %} {% elif only_sso %}
<a href="{% url 'login-sso' %}" class="main-signup-button btn btn-large btn-primary">Log in now!</a> <a href="{% url 'login-sso' %}" class="main-signup-button btn btn-large btn-primary">{% trans 'Log in now!' %}</a>
{% else %} {% else %}
<a href="{% url 'register' %}" class="main-signup-button btn btn-large btn-primary">Register now!</a> <a href="{% url 'register' %}" class="main-signup-button btn btn-large btn-primary">{% trans 'Register now!' %}</a>
{% endif %} {% endif %}
</div> </div>
<img src="/static/images/landing-page/laptop-screenshot.png" class="main-image" alt="Screenshot of Zulip" /> <img src="/static/images/landing-page/laptop-screenshot.png" class="main-image" alt="Screenshot of Zulip" />
@@ -41,15 +42,15 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
Conversations, not&nbsp;messages. {% trans 'Conversations, not messages' %}.
</span> </span>
<span class="description"> <span class="description">
<p>Every conversation in Zulip has a <em>topic</em>, so it&rsquo;s <p>{% blocktrans %}Every conversation in Zulip has a <em>topic</em>, so it&rsquo;s
easy to keep conversations straight. Are your coworkers discussing easy to keep conversations straight. Are your coworkers discussing
a software bug and the content of your website at the same time? a software bug and the content of your website at the same time?
No problem. No problem.{% endblocktrans %}
</p> </p>
<p>You wouldnt tolerate email without subject lines or threading, so why do you for chat?</p> <p>{% trans "You wouldnt tolerate email without subject lines or threading, so why do you for chat?" %}</p>
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -62,15 +63,15 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
Easily&nbsp;read&nbsp;just the&nbsp;important&nbsp;things. {% trans 'Easily read just the important things' %}.
</span> </span>
<span class="description"> <span class="description">
<p>Sometimes, important things get discussed when you&rsquo;re not <p>{% blocktrans %}Sometimes, important things get discussed when you&rsquo;re not
around. Unfortunately, so do a lot of unimportant things.</p> around. Unfortunately, so do a lot of unimportant things.{% endblocktrans %}</p>
<p><em>Narrowing</em> by stream or topic lets you focus on that important <p>{% blocktrans %}<em>Narrowing</em> by stream or topic lets you focus on that important
customer project without having to read about how Jim&rsquo;s guitar lessons customer project without having to read about how Jim&rsquo;s guitar lessons
are going.</p> are going.{% endblocktrans %}</p>
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -83,12 +84,12 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
Search&nbsp;that&rsquo;s&nbsp;better than&nbsp;Gmail&rsquo;s. {% trans "Search that's better than Gmail's" %}.
</span> </span>
<span class="description"> <span class="description">
An impressive amount of knowledge lives in your chat system. Zulip&rsquo;s {% blocktrans %}An impressive amount of knowledge lives in your chat system. Zulip&rsquo;s
powerful and fast search will delight you with how quickly you can find powerful and fast search will delight you with how quickly you can find
exactly what you&rsquo;re looking for. exactly what you&rsquo;re looking for.{% endblocktrans %}
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -101,14 +102,14 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
Integrations&nbsp;that don&rsquo;t&nbsp;intrude. {% trans "Integrations that don't intrude" %}.
</span> </span>
<span class="description"> <span class="description">
<p>Zulip has <a href="/integrations">many integrations</a> and <p>{% blocktrans %}Zulip has <a href="/integrations">many integrations</a> and
a powerful <a href="/api">API</a> to match. But here&rsquo;s a powerful <a href="/api">API</a> to match. But here&rsquo;s
where it gets interesting: thanks to how Zulip categorizes messages, where it gets interesting: thanks to how Zulip categorizes messages,
automated messages never overwhelm you. As with any topic in Zulip, automated messages never overwhelm you. As with any topic in Zulip,
they&rsquo;re easy to focus on, skim, defer to later, or ignore&mdash;as appropriate.</p> they&rsquo;re easy to focus on, skim, defer to later, or ignore&mdash;as appropriate.{% endblocktrans %}</p>
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -121,12 +122,12 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
As&nbsp;technical&nbsp;as you&nbsp;want&nbsp;to&nbsp;be. {% trans 'As technical as you want to be' %}.
</span> </span>
<span class="description"> <span class="description">
<p>Keyboard shortcuts? Check.<br /> <p>{% trans 'Keyboard shortcuts? Check.' %}<br />
Syntax highlighting? Check.<br /> {% trans 'Syntax highlighting? Check.' %}<br />
Discuss code and technical topics with ease.</p> {% trans 'Discuss code and technical topics with ease.' %}</p>
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -139,12 +140,12 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="feature-text"> <div class="feature-text">
<span class="tagline"> <span class="tagline">
&hellip;and&nbsp;all&nbsp;the obvious&nbsp;stuff,&nbsp;too. &hellip; {% trans 'and all the obvious stuff, too.' %}
</span> </span>
<span class="description"> <span class="description">
<p>Drag-and-drop file uploads, image pasting, group private messages, <p>{% blocktrans %}Drag-and-drop file uploads, image pasting, group private messages,
audible notifications, missed-message emails, desktop apps, and audible notifications, missed-message emails, desktop apps, and
<a href="/features">everything else you might want</a>. Including emoji, naturally.</p> <a href="/features">everything else you might want</a>. Including emoji, naturally.{% endblocktrans %}</p>
</span> </span>
</div> </div>
<div class="feature-illustration"> <div class="feature-illustration">
@@ -157,7 +158,7 @@
<div class="app-main feature-line-container"> <div class="app-main feature-line-container">
<div class="platform-text"> <div class="platform-text">
<span class="tagline"> <span class="tagline">
On&nbsp;the&nbsp;platform of&nbsp;your&nbsp;choice. {% trans 'On the platform of your choice.' %}
</span> </span>
</div> </div>
<div class="platform-icons"> <div class="platform-icons">
@@ -193,9 +194,9 @@
<div class="app-main feature-line-container centered-content"> <div class="app-main feature-line-container centered-content">
{% if not_voyager %} {% if not_voyager %}
{% elif only_sso %} {% elif only_sso %}
<a href="{% url 'login-sso' %}" class="bottom-signup-button btn btn-large btn-primary">Log in now</a> <a href="{% url 'login-sso' %}" class="bottom-signup-button btn btn-large btn-primary">{% trans 'Log in now' %}</a>
{% else %} {% else %}
<a href="{% url 'register' %}" class="bottom-signup-button btn btn-large btn-primary">Register now</a> <a href="{% url 'register' %}" class="bottom-signup-button btn btn-large btn-primary">{% trans 'Register now' %}</a>
{% endif %} {% endif %}
</div> </div>
</div> </div>

View File

@@ -1,54 +1,55 @@
{% load i18n %}
{# Home tab of the app, containing messages. #} {# Home tab of the app, containing messages. #}
<div class="message_area_padder message_list" id="main_div"> <div class="message_area_padder message_list" id="main_div">
<div id="loading_more_messages_indicator"></div> <div id="loading_more_messages_indicator"></div>
<div id="page_loading_indicator"></div> <div id="page_loading_indicator"></div>
<div id="first_run_message" class="empty_feed_notice"> <div id="first_run_message" class="empty_feed_notice">
<h4>Welcome to {{product_name}}</h4> <h4>{% trans 'Welcome to' %} {{product_name}}</h4>
<p>See, the thing about it is... there aren't any messages <p>{% blocktrans %}See, the thing about it is... there aren't any messages
here for you right now. I'm sure someone will eventually send here for you right now. I'm sure someone will eventually send
you one.</p> you one.{% endblocktrans %}</p>
<p>Or, <strong>take matters into your own hands</strong>, <p>{% trans 'Or' %}, <strong>{% trans 'take matters into your own hands' %}</strong>,
and <a href="#" class="empty_feed_compose_stream"> {% trans 'and' %} <a href="#" class="empty_feed_compose_stream">
compose a new stream message</a>.</p> {% trans 'compose a new stream message' %}</a>.</p>
</div> </div>
<div id="empty_narrow_message" class="empty_feed_notice"> <div id="empty_narrow_message" class="empty_feed_notice">
<h4>Nothing's been sent here yet!</h4> <h4>{% trans "Nothing's been sent here yet!" %}</h4>
<p>Why not <a href="#" class="empty_feed_compose_stream"> <p>{% trans 'Why not' %} <a href="#" class="empty_feed_compose_stream">
start the conversation</a>?</p> {% trans 'start the conversation' %}</a>?</p>
</div> </div>
<div id="empty_narrow_all_private_message" class="empty_feed_notice"> <div id="empty_narrow_all_private_message" class="empty_feed_notice">
<h4>You have no private messages yet!</h4> <h4>{% trans 'You have no private messages yet!' %}</h4>
<p>Why not <a href="#" class="empty_feed_compose_private"> <p>{% trans 'Why not' %} <a href="#" class="empty_feed_compose_private">
start the conversation</a>?</p> {% trans 'start the conversation' %}</a>?</p>
</div> </div>
<div id="empty_narrow_private_message" class="empty_feed_notice"> <div id="empty_narrow_private_message" class="empty_feed_notice">
<h4>You have no private messages with this person yet!</h4> <h4>{% trans 'You have no private messages with this person yet!' %}</h4>
<p>Why not <a href="#" class="empty_feed_compose_private"> <p>{% trans 'Why not' %} <a href="#" class="empty_feed_compose_private">
start the conversation</a>?</p> {% trans 'start the conversation' %}</a>?</p>
</div> </div>
<div id="empty_narrow_multi_private_message" class="empty_feed_notice"> <div id="empty_narrow_multi_private_message" class="empty_feed_notice">
<h4>You have no private messages with these people yet!</h4> <h4>{% trans 'You have no private messages with these people yet!' %}</h4>
<p>Why not <a href="#" class="empty_feed_compose_private"> <p>{% trans 'Why not' %} <a href="#" class="empty_feed_compose_private">
start the conversation</a>?</p> {% trans 'start the conversation' %}</a>?</p>
</div> </div>
<div id="nonsubbed_stream_narrow_message" class="empty_feed_notice"> <div id="nonsubbed_stream_narrow_message" class="empty_feed_notice">
<h4>You aren't subscribed to this stream!</h4> <h4>{% trans "You aren't subscribed to this stream!" %}</h4>
<p>Want to <a href="#" class="empty_feed_join">join it</a>?</p> <p>{% trans 'Want to' %} <a href="#" class="empty_feed_join">{% trans 'join it' %}</a>?</p>
</div> </div>
<div id="empty_star_narrow_message" class="empty_feed_notice"> <div id="empty_star_narrow_message" class="empty_feed_notice">
<h4>You haven't starred anything yet!</h4> <h4>{% trans "You haven't starred anything yet!" %}</h4>
</div> </div>
<div id="empty_narrow_all_mentioned" class="empty_feed_notice"> <div id="empty_narrow_all_mentioned" class="empty_feed_notice">
<h4>You haven't been mentioned yet.</h4> <h4>{% trans "You haven't been mentioned yet" %}.</h4>
</div> </div>
<div id="empty_search_narrow_message" class="empty_feed_notice"> <div id="empty_search_narrow_message" class="empty_feed_notice">
<h4>Nobody has talked about that yet!</h4> <h4>{% trans 'Nobody has talked about that yet!' %}</h4>
</div> </div>
<div class="message_table focused_table" id="zhome"> <div class="message_table focused_table" id="zhome">
</div> </div>

View File

@@ -1,5 +1,5 @@
{% extends "zerver/base.html" %} {% extends "zerver/base.html" %}
{% load i18n %}
{# The app itself. #} {# The app itself. #}
{# Includes some other templates as tabs. #} {# Includes some other templates as tabs. #}
@@ -46,8 +46,8 @@ var page_params = {{ page_params }};
{% endblock %} {% endblock %}
{% block content %} {% block content %}
<div id="css-loading"> <div id="css-loading">
<h3>Loading...</h3> <h3>{% trans 'Loading' %}...</h3>
<p>If this message does not go away, please wait a couple seconds and <a href="javascript:location.reload(true)">reload</a> the page.</p> <p>{% trans 'If this message does not go away, please wait a couple seconds and' %} <a href="javascript:location.reload(true)">{% trans 'reload' %}</a> {% trans 'the page' %}.</p>
</div> </div>
<div id="top-screen" class="screen"></div> <div id="top-screen" class="screen"></div>

View File

@@ -1,5 +1,5 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% load minified_js %} {% load minified_js %}
{# A landing page for the first user in a realm, prompting her to invite her colleages. #} {# A landing page for the first user in a realm, prompting her to invite her colleages. #}
@@ -18,18 +18,18 @@
{% block portico_content %} {% block portico_content %}
<h1 style="margin-top:30px;">You're the first one here!</h1> <h1 style="margin-top:30px;">{% trans "You're the first one here!" %}</h1>
<p> <p>
Let's invite some folks for you to chat with: {% trans "Let's invite some folks for you to chat with" %}:
</p> </p>
<div id="invite_rows"> <div id="invite_rows">
<form id="invite_form"> <form id="invite_form">
{% csrf_token %} {% csrf_token %}
<div class="invite_row"><input name="email_1" class="invite_email" type={% if not invite_suffix %}"email"{% else %}"text"{% endif %} /> {% if invite_suffix %}@{{invite_suffix}}{% endif %}</div> <div class="invite_row"><input name="email_1" class="invite_email" type={% if not invite_suffix %}"email"{% else %}"text"{% endif %} /> {% if invite_suffix %}@{{invite_suffix}}{% endif %}</div>
<p id="invite_blurb">(We'll email invitations to them)</p> <p id="invite_blurb">({% trans "We'll email invitations to them" %})</p>
<div class="alert" id="invite_error" style="display: none;"> <div class="alert" id="invite_error" style="display: none;">
</div> </div>
<button id="submit_invitation" class="btn btn-primary" data-loading-text="Next">Next »</button> <button id="submit_invitation" class="btn btn-primary" data-loading-text="Next">{% trans 'Next' %} »</button>
</form> </form>
</div> </div>
{% endblock %} {% endblock %}

View File

@@ -1,15 +1,16 @@
{% load i18n %}
<div class="modal hide" id="invite-user" tabindex="-1" role="dialog" <div class="modal hide" id="invite-user" tabindex="-1" role="dialog"
aria-labelledby="invite-user-label" aria-hidden="true"> aria-labelledby="invite-user-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="invite-user-label">Invite coworkers to {{product_name}}</h3> <h3 id="invite-user-label">{% trans 'Invite coworkers to' %} {{product_name}}</h3>
</div> </div>
<form id="invite_user_form" class="form-horizontal" <form id="invite_user_form" class="form-horizontal"
action="/json/invite_users" method="POST">{% csrf_token %} action="/json/invite_users" method="POST">{% csrf_token %}
<div class="modal-body"> <div class="modal-body">
<div class="control-group"> <div class="control-group">
<div id="invite-result"></div> <div id="invite-result"></div>
<label class="control-label" for="invitee_emails">Emails (one on each line or comma-separated)</label> <label class="control-label" for="invitee_emails">{% trans 'Emails (one on each line or comma-separated)' %}</label>
<div class="controls"> <div class="controls">
<textarea rows="2" id="invitee_emails" <textarea rows="2" id="invitee_emails"
name="invitee_emails" name="invitee_emails"
@@ -18,13 +19,13 @@
</div> </div>
<div class="alert" id="invite_status"></div> <div class="alert" id="invite_status"></div>
<div class="control-group"> <div class="control-group">
<label class="control-label" for="streams_to_add">Streams they should join</label> <label class="control-label" for="streams_to_add">{% trans 'Streams they should join' %}</label>
<div class="controls" id="streams_to_add"></div> <div class="controls" id="streams_to_add"></div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button> <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">{% trans 'Cancel' %}</button>
<button id="submit-invitation" class="btn btn-primary" data-loading-text="Inviting..." type="submit">Invite</button> <button id="submit-invitation" class="btn btn-primary" data-loading-text="Inviting..." type="submit">{% trans 'Invite' %}</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -1,76 +1,77 @@
{% load i18n %}
<div class="modal hide" id="keyboard-shortcuts" tabindex="-1" role="dialog" <div class="modal hide" id="keyboard-shortcuts" tabindex="-1" role="dialog"
aria-labelledby="keyboard-shortcuts-label" aria-hidden="true"> aria-labelledby="keyboard-shortcuts-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="keyboard-shortcuts-label">Keyboard shortcuts</h3> <h3 id="keyboard-shortcuts-label">{% blocktrans %}Keyboard shortcuts{% endblocktrans %}</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div> <div>
<table class="hotkeys_table table table-striped table-bordered table-condensed"> <table class="hotkeys_table table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th colspan="2">Navigation</th> <th colspan="2">{% trans "Navigation" %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
<td class="hotkey">/</td> <td class="hotkey">/</td>
<td class="definition">Initiate a search</td> <td class="definition">{% blocktrans %}Initiate a search{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">q</td> <td class="hotkey">q</td>
<td class="definition">Search people</td> <td class="definition">{% blocktrans %}Search people{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">Up or k</td> <td class="hotkey">Up or k</td>
<td class="definition">Previous message</td> <td class="definition">{% blocktrans %}Previous message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">Down or j</td> <td class="hotkey">Down or j</td>
<td class="definition">Next message</td> <td class="definition">{% blocktrans %}Next message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">PgUp, K</td> <td class="hotkey">PgUp, K</td>
<td class="definition">Scroll up</td> <td class="definition">{% blocktrans %}Scroll up{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">PgDn, J, Spacebar</td> <td class="hotkey">PgDn, J, Spacebar</td>
<td class="definition">Scroll down</td> <td class="definition">{% blocktrans %}Scroll down{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">End</td> <td class="hotkey">End</td>
<td class="definition">Last message</td> <td class="definition">{% blocktrans %}Last message{% endblocktrans %}</td>
</tr> </tr>
</table> </table>
<table class="hotkeys_table table table-striped table-bordered table-condensed"> <table class="hotkeys_table table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th colspan="2">Composing messages</th> <th colspan="2">{% blocktrans %}Composing messages{% endblocktrans %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
<td class="hotkey">Enter or r</td> <td class="hotkey">Enter or r</td>
<td class="definition">Reply to message</td> <td class="definition">{% blocktrans %}Reply to message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">R</td> <td class="hotkey">R</td>
<td class="definition">Reply to author</td> <td class="definition">{% blocktrans %}Reply to author{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">c</td> <td class="hotkey">c</td>
<td class="definition">New stream message</td> <td class="definition">{% blocktrans %}New stream message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">C</td> <td class="hotkey">C</td>
<td class="definition">New private message</td> <td class="definition">{% blocktrans %}New private message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">Tab then Enter</td> <td class="hotkey">Tab then Enter</td>
<td class="definition">Send message</td> <td class="definition">{% blocktrans %}Send message{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">Esc</td> <td class="hotkey">Esc</td>
<td class="definition">Cancel compose</td> <td class="definition">{% blocktrans %}Cancel compose{% endblocktrans %}</td>
</tr> </tr>
</table> </table>
</div> </div>
@@ -79,53 +80,53 @@
<table class="hotkeys_table table table-striped table-bordered table-condensed"> <table class="hotkeys_table table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th colspan="2">Narrowing</th> <th colspan="2">{% trans "Narrowing" %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
<td class="hotkey">s</td> <td class="hotkey">s</td>
<td class="definition">Narrow by stream</td> <td class="definition">{% blocktrans %}Narrow by stream{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">S</td> <td class="hotkey">S</td>
<td class="definition">Narrow by topic</td> <td class="definition">{% blocktrans %}Narrow by topic{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">v</td> <td class="hotkey">v</td>
<td class="definition">Narrow to all private messages</td> <td class="definition">{% blocktrans %}Narrow to all private messages{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">A or D</td> <td class="hotkey">A or D</td>
<td class="definition">Cycle between stream narrows</td> <td class="definition">{% blocktrans %}Cycle between stream narrows{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">Esc</td> <td class="hotkey">Esc</td>
<td class="definition">Return to home view</td> <td class="definition">{% blocktrans %}Return to home view{% endblocktrans %}</td>
</tr> </tr>
</table> </table>
<table class="hotkeys_table table table-striped table-bordered table-condensed"> <table class="hotkeys_table table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th colspan="2">Menus</th> <th colspan="2">{% trans "Menus" %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
<td class="hotkey">i</td> <td class="hotkey">i</td>
<td class="definition">Open message actions menu</td> <td class="definition">{% blocktrans %}Open message actions menu{% endblocktrans %}</td>
</tr> </tr>
<tr id="edit-message-hotkey-help"> <tr id="edit-message-hotkey-help">
<td class="hotkey">i then Enter</td> <td class="hotkey">i then Enter</td>
<td class="definition">Edit a message you sent</td> <td class="definition">{% blocktrans %}Edit a message you sent{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td class="hotkey">?</td> <td class="hotkey">?</td>
<td class="definition">Show these keyboard shortcuts</td> <td class="definition">{% blocktrans %}Show these keyboard shortcuts{% endblocktrans %}</td>
</tr> </tr>
</table> </table>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Close</button> <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">{% trans "Close" %}</button>
</div> </div>
</div> </div>

View File

@@ -1,22 +1,23 @@
{% load i18n %}
<div class="left-sidebar" id="left-sidebar"> <div class="left-sidebar" id="left-sidebar">
<div class="bottom_sidebar"> <div class="bottom_sidebar">
<ul id="global_filters" class="filters"> <ul id="global_filters" class="filters">
{# Special-case this link so we don't actually go to page top. #} {# Special-case this link so we don't actually go to page top. #}
<li data-name="home" <li data-name="home"
class="global-filter active-filter"><span class="filter-icon"><i class="icon-vector-home"></i></span><a href="#">Home <span class="count"><span class="value"></span></span></a></li> class="global-filter active-filter"><span class="filter-icon"><i class="icon-vector-home"></i></span><a href="#">{% trans 'Home' %} <span class="count"><span class="value"></span></span></a></li>
<li data-name="private" class="global-filter"><span class="filter-icon"><i class="icon-vector-user"></i></span><a href="#narrow/is/private">Private messages <span class="count"><span class="value"></span></span></a></li> <li data-name="private" class="global-filter"><span class="filter-icon"><i class="icon-vector-user"></i></span><a href="#narrow/is/private">{% trans 'Private messages' %} <span class="count"><span class="value"></span></span></a></li>
<li data-name="starred" class="global-filter"><span class="filter-icon"><i class="icon-vector-star"></i></span><a href="#narrow/is/starred">Starred messages</a></li> <li data-name="starred" class="global-filter"><span class="filter-icon"><i class="icon-vector-star"></i></span><a href="#narrow/is/starred">{% trans 'Starred messages' %}</a></li>
<li data-name="mentioned" class="global-filter"><span class="filter-icon"><i class="icon-vector-tag"></i></span><a href="#narrow/is/mentioned">@-mentions<span class="count"><span class="value"></span></span></a></li> <li data-name="mentioned" class="global-filter"><span class="filter-icon"><i class="icon-vector-tag"></i></span><a href="#narrow/is/mentioned">{% trans '@-mentions' %}<span class="count"><span class="value"></span></span></a></li>
</ul> </ul>
<div id="streams_list" class="zoom-out"> <div id="streams_list" class="zoom-out">
<div id="streams_header" class="zoom-in-hide"><h4 class="sidebar-title">STREAMS</h4> <div id="streams_header" class="zoom-in-hide"><h4 class="sidebar-title">{% trans 'STREAMS' %}</h4>
<a href=""><i id="streams_inline_cog" class='icon-vector-cog' data-toggle="tooltip" title="Subscribe, add, or configure streams"></i></a> <a href=""><i id="streams_inline_cog" class='icon-vector-cog' data-toggle="tooltip" title="Subscribe, add, or configure streams"></i></a>
</div> </div>
<div id="topics_header"> <div id="topics_header">
<div class="all-streams-padding"> <div class="all-streams-padding">
<ul class="filters"> <ul class="filters">
<li data-name="all-streams"> <li data-name="all-streams">
<i class="icon-vector-chevron-left"></i> <a href="" class="show-all-streams">All streams</a> <i class="icon-vector-chevron-left"></i> <a href="" class="show-all-streams">{% trans 'All streams' %}</a>
</li> </li>
</ul> </ul>
</div> </div>
@@ -27,24 +28,24 @@
</div> </div>
<div id="share-the-love"> <div id="share-the-love">
<div id="share-the-love-expand-collapse"> <div id="share-the-love-expand-collapse">
<i class="toggle icon-vector-caret-right"></i><div id="sharethelove-header"><h4 class="share-the-love-title">SHARE THE LOVE<span class="still-have-invites"> (<span class="invite-count">0</span>)</span></h4></div> <i class="toggle icon-vector-caret-right"></i><div id="sharethelove-header"><h4 class="share-the-love-title">{% trans 'SHARE THE LOVE' %}<span class="still-have-invites"> (<span class="invite-count">0</span>)</span></h4></div>
</div> </div>
<div id="share-the-love-contents"> <div id="share-the-love-contents">
<div id="tell-a-friend-success" class="alert alert-success"> <div id="tell-a-friend-success" class="alert alert-success">
<strong>Thanks!</strong> A hand-crafted, artisanal invite is on the way. <strong>{% trans 'Thanks!' %}</strong> {% trans 'A hand-crafted, artisanal invite is on the way' %}.
</div> </div>
<div class="still-have-invites" id="encouraging-invite-message"> <div class="still-have-invites" id="encouraging-invite-message">
<p> <p>
Know someone who would love Zulip for their company or group? Invite 'em! {% trans "Know someone who would love Zulip for their company or group? Invite 'em!" %}
</p> </p>
</div> </div>
<div class="no-more-invites"> <div class="no-more-invites">
<p> <p>
We'll have more invites for you soon, but {% blocktrans %}We'll have more invites for you soon, but
for now, enjoy this <a target="_blank" for now, enjoy this <a target="_blank"
href="http://www.youtube.com/watch?v=PW71En5Pa5s#t=2m01s">song href="http://www.youtube.com/watch?v=PW71En5Pa5s#t=2m01s">song
that expresses how we feel when you're that expresses how we feel when you're
logged out</a>. logged out</a>.{% endblocktrans %}
</p> </p>
</div> </div>
<div class="still-have-invites"> <div class="still-have-invites">
@@ -56,7 +57,7 @@
</div> </div>
<div class="invite-count-area"> <div class="invite-count-area">
<span id="invite-hearts"></span> <span id="invite-hearts"></span>
<small class="pull-right"><span class="invite-count">0</span> invite<span class="invite-count-is-plural">s</span> remaining</small> <small class="pull-right"><span class="invite-count">0</span> {% trans 'invite' %}<span class="invite-count-is-plural">s</span> {% trans 'remaining' %}</small>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -2,6 +2,7 @@
{# Login page. #} {# Login page. #}
{% load i18n %}
{% load minified_js %} {% load minified_js %}
{% block customhead %} {% block customhead %}
@@ -15,10 +16,10 @@
<img src="/static/images/logo/zballoon.png" class="os-illustration" alt="Zulip balloon" /> <img src="/static/images/logo/zballoon.png" class="os-illustration" alt="Zulip balloon" />
<div class="main-headline-text"> <div class="main-headline-text">
<span class="tagline os-tagline"> <span class="tagline os-tagline">
Zulip has been released as open source software! {% trans 'Zulip has been released as open source software!' %}
</span> </span>
<span class="footnote os-footnote"> <span class="footnote os-footnote">
Read the <a href="https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project" target="_blank">announcement</a> or go to <a href="https://www.zulip.org" target="_blank">the Zulip open source project website</a>. {% trans 'Read the' %} <a href="https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project" target="_blank">{% trans 'announcement' %}</a> {% trans 'or go to' %} <a href="https://www.zulip.org" target="_blank">{% trans 'the Zulip open source project website' %}</a>.
</span> </span>
</div> </div>
</div> </div>
@@ -44,19 +45,19 @@ autofocus('#id_username');
<div class="app-main login-page-container"> <div class="app-main login-page-container">
{% if dev_auth_enabled %} {% if dev_auth_enabled %}
<h3 class="login-page-header">Zulip Dev Login</h3> <h3 class="login-page-header">{% trans 'Zulip Dev Login' %}</h3>
{% if not password_auth_enabled %} {% if not password_auth_enabled %}
<h4 class="login-page-subheader">Choose a user:</h4> <h4 class="login-page-subheader">{% trans 'Choose a user' %}:</h4>
{% endif %} {% endif %}
{% else %} {% else %}
<h3 class="login-page-header">You look familiar.</h3> <h3 class="login-page-header">{% trans 'You look familiar' %}.</h3>
{% endif %} {% endif %}
{% if only_sso %} {% if only_sso %}
{% comment %}SSO users don't have a password.{% endcomment %} {% comment %}SSO users don't have a password.{% endcomment %}
<div class="login-sso"> <div class="login-sso">
<a href="/accounts/login/sso" class="btn btn-large btn-primary">Sign in with SSO</a> <a href="/accounts/login/sso" class="btn btn-large btn-primary">{% trans 'Sign in with SSO' %}</a>
</div> </div>
{% else %} {% else %}
@@ -65,7 +66,7 @@ autofocus('#id_username');
{% if form.errors or desktop_sso_unknown_email %} {% if form.errors or desktop_sso_unknown_email %}
<div class="alert alert-error"> <div class="alert alert-error">
{% if desktop_sso_unknown_email %} {% if desktop_sso_unknown_email %}
Zulip is not currently available for your domain. <br /> {% trans 'Zulip is not currently available for your domain' %}. <br />
{% else %} {% else %}
{% for error in form.errors.values %} {% for error in form.errors.values %}
<div>{{ error | striptags }}</div> <div>{{ error | striptags }}</div>
@@ -76,7 +77,7 @@ autofocus('#id_username');
{% if email %} {% if email %}
<div class="alert"> <div class="alert">
You've already registered with this email address. Please log in below. {% trans "You've already registered with this email address. Please log in below" %}.
</div> </div>
{% endif %} {% endif %}
@@ -91,7 +92,7 @@ autofocus('#id_username');
> >
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
<label for="id_username" class="control-label">Email</label> <label for="id_username" class="control-label">{% trans 'Email' %}</label>
<div class="controls"> <div class="controls">
<input id="id_username" type="email" name="username" class="email required" value="{{ email }}" maxlength="72" /> <input id="id_username" type="email" name="username" class="email required" value="{{ email }}" maxlength="72" />
</div> </div>
@@ -99,7 +100,7 @@ autofocus('#id_username');
{% if not desktop_sso_dispatch %} {% if not desktop_sso_dispatch %}
<div class="control-group"> <div class="control-group">
<label for="id_password" class="control-label">Password</label> <label for="id_password" class="control-label">{% trans 'Password' %}</label>
<div class="controls"> <div class="controls">
<input id="id_password" name="password" class="required" type="password" /> <input id="id_password" name="password" class="required" type="password" />
</div> </div>
@@ -110,7 +111,7 @@ autofocus('#id_username');
<input type="submit" class="btn btn-large btn-primary" value="Log in" /> <input type="submit" class="btn btn-large btn-primary" value="Log in" />
{% if not desktop_sso_dispatch %} {% if not desktop_sso_dispatch %}
<span class="login-forgot-password"> <span class="login-forgot-password">
<a href="{% url 'django.contrib.auth.views.password_reset' %}">Forgot password?</a> <a href="{% url 'django.contrib.auth.views.password_reset' %}">{% trans 'Forgot password?' %}</a>
</span> </span>
{% endif %} {% endif %}
</div> </div>
@@ -123,14 +124,14 @@ autofocus('#id_username');
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
{% if password_auth_enabled %} {% if password_auth_enabled %}
<label for="direct_email" class="direct-label">or Choose a user:</label> <label for="direct_email" class="direct-label">{% trans 'or Choose a user' %}:</label>
{% endif %} {% endif %}
<div class="controls"> <div class="controls">
<p>(Administrators)</p> <p>({% trans 'Administrators' %})</p>
{% for user_email in direct_admins %} {% for user_email in direct_admins %}
<p><input type="submit" name="direct_email" class="btn-direct btn-admin" value="{{ user_email }}" /></p> <p><input type="submit" name="direct_email" class="btn-direct btn-admin" value="{{ user_email }}" /></p>
{% endfor %} {% endfor %}
<p>(Normal users)</p> <p>({% trans 'Normal users' %})</p>
{% for user_email in direct_users %} {% for user_email in direct_users %}
<p><input type="submit" name="direct_email" class="btn-direct btn-user" value="{{ user_email }}" /></p> <p><input type="submit" name="direct_email" class="btn-direct btn-user" value="{{ user_email }}" /></p>
{% endfor %} {% endfor %}
@@ -141,7 +142,7 @@ autofocus('#id_username');
{% if google_auth_enabled %} {% if google_auth_enabled %}
<div class="login-google"> <div class="login-google">
or <a href="{% url 'zerver.views.start_google_oauth2' %}" class="login-google-button zocial google">Sign in with Google</a> or <a href="{% url 'zerver.views.start_google_oauth2' %}" class="login-google-button zocial google">{% trans 'Sign in with Google' %}</a>
</div> </div>
{% endif %} {% endif %}

View File

@@ -1,15 +1,16 @@
{% load i18n %}
<div class="modal hide" id="markdown-help" tabindex="-1" role="dialog" <div class="modal hide" id="markdown-help" tabindex="-1" role="dialog"
aria-labelledby="markdown-help-label" aria-hidden="true"> aria-labelledby="markdown-help-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="markdown-help-label">Message formatting</h3> <h3 id="markdown-help-label">{% blocktrans %}Message formatting{% endblocktrans %}</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<div id="markdown-instructions"> <div id="markdown-instructions">
<table class="table table-striped table-condensed table-rounded table-bordered" id="fmt_help_table"> <table class="table table-striped table-condensed table-rounded table-bordered" id="fmt_help_table">
<thead><tr> <thead><tr>
<th>You type</th> <th>{% blocktrans %}You type{% endblocktrans %}</th>
<th>You get</th> <th>{% blocktrans %}You get{% endblocktrans %}</th>
</tr></thead> </tr></thead>
<tbody> <tbody>
@@ -70,7 +71,7 @@ def zulip():
</td> </td>
</tr> </tr>
<tr> <tr>
<td colspan="2">You can also make a code block by indenting each line with 4 spaces.</td> <td colspan="2">{% blocktrans %}You can also make a code block by indenting each line with 4 spaces.{% endblocktrans %}</td>
</tr> </tr>
<tr> <tr>
<td>&gt; Quoted</td> <td>&gt; Quoted</td>
@@ -84,17 +85,17 @@ Quoted block
<td><blockquote><p>Quoted block</p></blockquote></td> <td><blockquote><p>Quoted block</p></blockquote></td>
</tr> </tr>
<tr> <tr>
<td colspan="2">You can also make <a target="_blank" <td colspan="2">{% blocktrans %}You can also make <a target="_blank"
href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">tables</a> href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">tables</a>
with this <a target="_blank" with this <a target="_blank"
href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">Markdown-ish href="https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables">Markdown-ish
table syntax</a>.</td> table syntax</a>{% endblocktrans %}.</td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Close</button> <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">{% trans "Close" %}</button>
</div> </div>
</div> </div>

View File

@@ -1,3 +1,4 @@
{% load i18n %}
<div class="header"> <div class="header">
<div class="header-main rightside-userlist" id="top_navbar"> <div class="header-main rightside-userlist" id="top_navbar">
<div class="column-left"> <div class="column-left">
@@ -16,7 +17,7 @@
<form id="searchbox_form" class="form-search navbar-search"> <form id="searchbox_form" class="form-search navbar-search">
<div id="search_arrows" class="input-append"> <div id="search_arrows" class="input-append">
<i class="icon-vector-search"></i> <i class="icon-vector-search"></i>
<input class="search-query input-block-level" id="search_query" type="text" placeholder="Search" <input class="search-query input-block-level" id="search_query" type="text" placeholder="{% trans 'Search' %}"
autocomplete="off" /> autocomplete="off" />
{# Start the button off disabled since there is no active search #} {# Start the button off disabled since there is no active search #}
<button class="btn search_button" type="button" id="search_exit" disabled="disabled"><i class="icon-vector-remove"></i></button> <button class="btn search_button" type="button" id="search_exit" disabled="disabled"><i class="icon-vector-remove"></i></button>
@@ -46,62 +47,62 @@
<li style="display:none;"><a href="#home" data-toggle="tab"></a></li> <li style="display:none;"><a href="#home" data-toggle="tab"></a></li>
<li title="Manage Streams"> <li title="Manage Streams">
<a href="#subscriptions" data-toggle="tab"> <a href="#subscriptions" data-toggle="tab">
<i class="icon-vector-exchange"></i> Manage Streams <i class="icon-vector-exchange"></i> {% trans 'Manage Streams' %}
</a> </a>
</li> </li>
<li title="Settings"> <li title="Settings">
<a href="#settings" data-toggle="tab"> <a href="#settings" data-toggle="tab">
<i class="icon-vector-wrench"></i> Settings <i class="icon-vector-wrench"></i> {% trans 'Settings' %}
</a> </a>
</li> </li>
<li title="Keyboard shortcuts"> <li title="Keyboard shortcuts">
<a href="#keyboard-shortcuts" role="button" data-toggle="modal"> <a href="#keyboard-shortcuts" role="button" data-toggle="modal">
<i class="icon-vector-question-sign"></i> Keyboard shortcuts <i class="icon-vector-question-sign"></i> {% trans 'Keyboard shortcuts' %}
</a> </a>
</li> </li>
<li title="Message formatting"> <li title="Message formatting">
<a href="#markdown-help" role="button" data-toggle="modal"> <a href="#markdown-help" role="button" data-toggle="modal">
<i class="icon-vector-pencil"></i> Message formatting <i class="icon-vector-pencil"></i> {% trans 'Message formatting' %}
</a> </a>
</li> </li>
<li title="Search help"> <li title="Search help">
<a href="#search-operators" role="button" data-toggle="modal"> <a href="#search-operators" role="button" data-toggle="modal">
<i class="icon-vector-search"></i> Search help <i class="icon-vector-search"></i> {% trans 'Search help' %}
</a> </a>
</li> </li>
<li class="divider"></li> <li class="divider"></li>
<li title="Desktop & mobile apps"> <li title="Desktop & mobile apps">
<a href="/apps" target="_blank" role="button"> <a href="/apps" target="_blank" role="button">
<i class="icon-vector-desktop"></i> Desktop & mobile apps <i class="icon-vector-desktop"></i> {% trans 'Desktop & mobile apps' %}
</a> </a>
</li> </li>
<li title="Integrations"> <li title="Integrations">
<a href="/integrations" target="_blank" role="button"> <a href="/integrations" target="_blank" role="button">
<i class="icon-vector-github"></i> Integrations <i class="icon-vector-github"></i> {% trans 'Integrations' %}
</a> </a>
</li> </li>
<li title="API documentation"> <li title="API documentation">
<a href="/api" target="_blank" role="button"> <a href="/api" target="_blank" role="button">
<i class="icon-vector-sitemap"></i> API documentation <i class="icon-vector-sitemap"></i> {% trans 'API documentation' %}
</a> </a>
</li> </li>
<li class="divider"></li> <li class="divider"></li>
<li title="Administration" class="admin-menu-item"> <li title="Administration" class="admin-menu-item">
<a href="#administration" role="button" data-toggle="tab"> <a href="#administration" role="button" data-toggle="tab">
<i class="icon-vector-bolt"></i> Administration <i class="icon-vector-bolt"></i> {% trans 'Administration' %}
</a> </a>
</li> </li>
{% if show_invites %} {% if show_invites %}
<li title="Invite coworkers to {{product_name}}"> <li title="Invite coworkers to {{product_name}}">
<a href="#invite-user" role="button" data-toggle="modal"> <a href="#invite-user" role="button" data-toggle="modal">
<i class="icon-vector-plus-sign"></i> Invite coworkers <i class="icon-vector-plus-sign"></i> {% trans 'Invite coworkers' %}
</a> </a>
</li> </li>
{% endif %} {% endif %}
{% if enable_feedback %} {% if enable_feedback %}
<li title="Feedback"> <li title="Feedback">
<a href="#feedback" class="feedback"> <a href="#feedback" class="feedback">
<i class="icon-vector-comment"></i> Feedback <i class="icon-vector-comment"></i> {% trans 'Feedback' %}
</a> </a>
</li> </li>
{% endif %} {% endif %}
@@ -109,19 +110,19 @@
{% if show_webathena %} {% if show_webathena %}
<li title="Grant {{product_name}} the Kerberos tickets needed to run your Zephyr mirror via Webathena" id="webathena_login_menu"> <li title="Grant {{product_name}} the Kerberos tickets needed to run your Zephyr mirror via Webathena" id="webathena_login_menu">
<a href="#webathena" class="webathena_login"> <a href="#webathena" class="webathena_login">
<i class="icon-vector-bolt"></i>Link with Webathena <i class="icon-vector-bolt"></i>{% trans 'Link with Webathena' %}
</a> </a>
</li> </li>
{% endif %} {% endif %}
<li title="Log out"> <li title="Log out">
<a href="#logout" class="logout_button"> <a href="#logout" class="logout_button">
<i class="icon-vector-off"></i> Log out <i class="icon-vector-off"></i> {% trans 'Log out' %}
</a> </a>
</li> </li>
{% if show_debug %} {% if show_debug %}
<li title="Debug"> <li title="Debug">
<a href="#debug" data-toggle="tab"> <a href="#debug" data-toggle="tab">
<i class="icon-vector-barcode"></i> Debug <i class="icon-vector-barcode"></i> {% trans 'Debug' %}
</a> </a>
</li> </li>
{% endif %} {% endif %}

View File

@@ -1,5 +1,5 @@
{% extends "zerver/base.html" %} {% extends "zerver/base.html" %}
{% load i18n %}
{% load compressed %} {% load compressed %}
{% comment %} {% comment %}
@@ -28,13 +28,13 @@ hence the name.
<div class="column-right top-links"> <div class="column-right top-links">
{% if not only_sso %} {% if not only_sso %}
<a href="{{login_url}}">Log in</a> <a href="{{login_url}}">{% trans 'Log in' %}</a>
{% endif %} {% endif %}
{% if only_sso %} {% if only_sso %}
<a href="{% url 'login-sso' %}">Log In</a> <a href="{% url 'login-sso' %}">{% trans 'Log In' %}</a>
{% else %} {% else %}
<a href="{% url 'register' %}">Register</a> <a href="{% url 'register' %}">{% trans 'Register' %}</a>
{% endif %} {% endif %}
</div> </div>
</div> </div>
@@ -55,19 +55,19 @@ hence the name.
<div class="footer"> <div class="footer">
<div class="footer-main"> <div class="footer-main">
<ul class="footer-navigation"> <ul class="footer-navigation">
<li><a href="/hello">About</a></li> <li><a href="/hello">{% trans 'About' %}</a></li>
{% if zulip_com %} {% if zulip_com %}
<li><span class="little-bullet">·</span></li> <li><span class="little-bullet">·</span></li>
<li><a href="/terms">Legal</a></li> <li><a href="/terms">{% trans 'Legal' %}</a></li>
{% endif %} {% endif %}
<li><span class="little-bullet">·</span></li> <li><span class="little-bullet">·</span></li>
<li><a href="{{login_url}}">Log in</a></li> <li><a href="{{login_url}}">{% trans 'Log in' %}</a></li>
{% if not only_sso %} {% if not only_sso %}
<li><span class="little-bullet">·</span></li> <li><span class="little-bullet">·</span></li>
<li> <li>
{% if zulip_com %} {% if zulip_com %}
{% else %} {% else %}
<a href="{% url 'register' %}">Register</a> <a href="{% url 'register' %}">{% trans 'Register' %}</a>
{% endif %} {% endif %}
</li> </li>
{% endif %} {% endif %}

View File

@@ -1,5 +1,5 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% comment %} {% comment %}
Gather other user information, after having confirmed Gather other user information, after having confirmed
their email address. their email address.
@@ -17,21 +17,21 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
<div class="pitch"> <div class="pitch">
<p style="margin-top:30px;">You're almost there. We just need you to do one last thing.</p> <p style="margin-top:30px;">{% trans "You're almost there. We just need you to do one last thing" %}.</p>
<h3>Tell us a bit about yourself.</h3> <h3>{% trans 'Tell us a bit about yourself' %}.</h3>
</div> </div>
<form method="post" class="form-horizontal" id="registration" action="{% url 'zerver.views.accounts_register' %}"> <form method="post" class="form-horizontal" id="registration" action="{% url 'zerver.views.accounts_register' %}">
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
<label for="id_email" class="control-label">Email</label> <label for="id_email" class="control-label">{% trans 'Email' %}</label>
<div class="controls fakecontrol"> <div class="controls fakecontrol">
<input type='hidden' name='key' value='{{ key }}' /> <input type='hidden' name='key' value='{{ key }}' />
<p>{{ email }}</p> <p>{{ email }}</p>
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label for="id_full_name" class="control-label">Full name</label> <label for="id_full_name" class="control-label">{% trans 'Full name' %}</label>
<div class="controls"> <div class="controls">
{% if lock_name %} {% if lock_name %}
<p class="fakecontrol">{{ full_name }}</p> <p class="fakecontrol">{{ full_name }}</p>
@@ -49,13 +49,13 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
</div> </div>
{% if password_auth_enabled %} {% if password_auth_enabled %}
<div class="control-group"> <div class="control-group">
<label for="id_password" class="control-label">Password</label> <label for="id_password" class="control-label">{% trans 'Password' %}</label>
<div class="controls"> <div class="controls">
<input id="id_password" class="required" type="password" name="password" <input id="id_password" class="required" type="password" name="password"
value="{% if form.password.value %}{{ form.password.value }}{% endif %}" value="{% if form.password.value %}{{ form.password.value }}{% endif %}"
maxlength="100" /> maxlength="100" />
{% if full_name %} {% if full_name %}
<span class="help-inline">This is used for mobile applications and other tools that require a password.</span> <span class="help-inline">{% trans 'This is used for mobile applications and other tools that require a password' %}.</span>
{% endif %} {% endif %}
{% if form.password.errors %} {% if form.password.errors %}
{% for error in form.password.errors %} {% for error in form.password.errors %}
@@ -65,7 +65,7 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label">Password strength</label> <label class="control-label">{% trans 'Password strength' %}</label>
<div class="controls"> <div class="controls">
<div class="progress" id="pw_strength"> <div class="progress" id="pw_strength">
<div class="bar bar-danger" style="width: 10%;"></div> <div class="bar bar-danger" style="width: 10%;"></div>
@@ -89,7 +89,7 @@ Form is validated both client-side using jquery-validate (see signup.js) and ser
{% endcomment %} {% endcomment %}
<input id="id_terms" class="required" type="checkbox" name="terms" <input id="id_terms" class="required" type="checkbox" name="terms"
{% if form.terms.value %}checked="checked"{% endif %} /> {% if form.terms.value %}checked="checked"{% endif %} />
I agree to the <a href="/terms" target="_blank">Terms of Service</a>. {% trans 'I agree to the' %} <a href="/terms" target="_blank">{% trans 'Terms of Service' %}</a>.
</label> </label>
{% if form.terms.errors %} {% if form.terms.errors %}
{% for error in form.terms.errors %} {% for error in form.terms.errors %}

View File

@@ -1,15 +1,15 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<div class="pitch"> <div class="pitch">
<h3>Reset your password.</h3> <h3>{% trans 'Reset your password' %}.</h3>
</div> </div>
<form method="post" class="form-horizontal" action="{% url 'django.contrib.auth.views.password_reset' %}"> <form method="post" class="form-horizontal" action="{% url 'django.contrib.auth.views.password_reset' %}">
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
<label for="id_email" class="control-label">Email</label> <label for="id_email" class="control-label">{% trans 'Email' %}</label>
<div class="controls"> <div class="controls">
<input id="id_email" class="required" type="text" name="email" <input id="id_email" class="required" type="text" name="email"
value="{% if form.email.value %}{{ form.email.value }}{% endif %}" value="{% if form.email.value %}{{ form.email.value }}{% endif %}"

View File

@@ -1,5 +1,5 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% block customhead %} {% block customhead %}
{{ block.super }} {{ block.super }}
<script type="text/javascript" src="/static/third/zxcvbn/zxcvbn.js"></script> <script type="text/javascript" src="/static/third/zxcvbn/zxcvbn.js"></script>
@@ -9,14 +9,14 @@
<div class="pitch"> <div class="pitch">
<hr/> <hr/>
<h3>Reset your password.</h3> <h3>{% trans 'Reset your password' %}.</h3>
</div> </div>
{% if validlink %} {% if validlink %}
<form method="post" id="password_reset" class="form-horizontal"> <form method="post" id="password_reset" class="form-horizontal">
{% csrf_token %} {% csrf_token %}
<div class="control-group"> <div class="control-group">
<label for="id_new_password1" class="control-label">Password</label> <label for="id_new_password1" class="control-label">{% trans 'Password' %}</label>
<div class="controls"> <div class="controls">
<input id="id_new_password1" class="required" type="password" name="new_password1" <input id="id_new_password1" class="required" type="password" name="new_password1"
value="{% if form.new_password1.value %}{{ form.new_password1.value }}{% endif %}" value="{% if form.new_password1.value %}{{ form.new_password1.value }}{% endif %}"
@@ -29,7 +29,7 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label">Password strength</label> <label class="control-label">{% trans 'Password strength' %}</label>
<div class="controls"> <div class="controls">
<div class="progress" id="pw_strength"> <div class="progress" id="pw_strength">
<div class="bar bar-danger" style="width: 10%;"></div> <div class="bar bar-danger" style="width: 10%;"></div>
@@ -37,7 +37,7 @@
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label for="id_new_password2" class="control-label">Confirm password</label> <label for="id_new_password2" class="control-label">{% trans 'Confirm password' %}</label>
<div class="controls"> <div class="controls">
<input id="id_new_password2" class="required" type="password" name="new_password2" <input id="id_new_password2" class="required" type="password" name="new_password2"
value="{% if form.new_password2.value %}{{ form.new_password2.value }}{% endif %}" value="{% if form.new_password2.value %}{{ form.new_password2.value }}{% endif %}"
@@ -61,7 +61,7 @@
autofocus('#id_new_password1'); autofocus('#id_new_password1');
</script> </script>
{% else %} {% else %}
<p>Sorry, the link you provided is invalid or has already been used.</p> <p>{% trans 'Sorry, the link you provided is invalid or has already been used' %}.</p>
{% endif %} {% endif %}
{% endblock %} {% endblock %}

View File

@@ -1,7 +1,7 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h1 style="margin-top: 20px">We've reset your password!</h1> <h1 style="margin-top: 20px">{% trans "We've reset your password!" %}</h1>
<p>Please <a href="{% url 'django.contrib.auth.views.login' %}">log in</a>.</p> <p>{% trans 'Please' %} <a href="{% url 'django.contrib.auth.views.login' %}">{% trans 'log in' %}</a>.</p>
{% endblock %} {% endblock %}

View File

@@ -1,7 +1,7 @@
{% extends "zerver/portico_signup.html" %} {% extends "zerver/portico_signup.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h1 style="margin-top: 20px">We just sent you a password reset!</h1> <h1 style="margin-top: 20px">{% trans 'We just sent you a password reset!' %}</h1>
<h1>Check your email to finish the process.</h1> <h1>{% trans 'Check your email to finish the process' %}.</h1>
<p>(Or don't, but then why did you fill out this form?)</p> <p>({% trans "Or don't, but then why did you fill out this form?" %})</p>
{% endblock %} {% endblock %}

View File

@@ -1,46 +1,47 @@
{% load i18n %}
<div class="right-sidebar" id="right-sidebar"> <div class="right-sidebar" id="right-sidebar">
<div class="alert alert_sidebar alert-error home-error-bar" id="connection-error"> <div class="alert alert_sidebar alert-error home-error-bar" id="connection-error">
<strong>Unable to connect to {{product_name}}.</strong> Updates may be delayed. <strong>{% trans 'Unable to connect to' %} {{product_name}}.</strong> {% trans 'Updates may be delayed' %}.
<br /><br /> Retrying soon... <br /><br /> <a class="restart_get_updates_button">Try now</a>. <br /><br /> {% trans 'Retrying soon' %}... <br /><br /> <a class="restart_get_updates_button">{% trans 'Try now' %}</a>.
</div> </div>
<div class="alert alert_sidebar alert-error home-error-bar" id="get_old_messages_error"> <div class="alert alert_sidebar alert-error home-error-bar" id="get_old_messages_error">
<strong>Unable to connect to {{product_name}}.</strong> Could not fetch messages. <strong>{% trans 'Unable to connect to' %} {{product_name}}.</strong> {% trans 'Could not fetch messages' %}.
<br /><br /> Retrying soon... <br /><br /> <br /><br /> {% trans 'Retrying soon' %}... <br /><br />
</div> </div>
<div class="alert alert_sidebar alert-error home-error-bar" id="zephyr-mirror-error"> <div class="alert alert_sidebar alert-error home-error-bar" id="zephyr-mirror-error">
<strong>Your Zephyr mirror is not working.</strong> <strong>{% trans 'Your Zephyr mirror is not working' %}.</strong>
<span id="normal-zephyr-mirror-error-text">We <span id="normal-zephyr-mirror-error-text">{% blocktrans %}We
recommend that you <a class="webathena_login">give recommend that you <a class="webathena_login">give
{{product_name}} the ability to mirror the messages for you via {{product_name}} the ability to mirror the messages for you via
WebAthena</a>. If you'd prefer, you can instead WebAthena</a>. If you'd prefer, you can instead
<a href="/zephyr-mirror" target="_blank">run the Zephyr mirror script yourself</a> <a href="/zephyr-mirror" target="_blank">run the Zephyr mirror script yourself</a>
in a screen session.</span> in a screen session{% endblocktrans %}.</span>
<span id="desktop-zephyr-mirror-error-text" class="notdisplayed">To fix <span id="desktop-zephyr-mirror-error-text" class="notdisplayed">{% blocktrans %}To fix
this, you'll need this, you'll need
to use <a href="https://zephyr.zulip.com">the web interface</a></span> to use <a href="https://zephyr.zulip.com">the web interface</a>{% endblocktrans %}</span>
</div> </div>
<div class="alert alert_sidebar alert-error home-error-bar" id="home-error"></div> <div class="alert alert_sidebar alert-error home-error-bar" id="home-error"></div>
<div class="alert alert_sidebar alert-error home-error-bar" id="reloading-application"></div> <div class="alert alert_sidebar alert-error home-error-bar" id="reloading-application"></div>
{% if enable_feedback %} {% if enable_feedback %}
<div id="feedback_section"> <div id="feedback_section">
<button type="button" class="btn btn-default btn-large" id="feedback_button"> <button type="button" class="btn btn-default btn-large" id="feedback_button">
<i class="icon-vector-comment"></i>&nbsp;&nbsp;Send feedback <i class="icon-vector-comment"></i>&nbsp;&nbsp;{% trans 'Send feedback' %}
</button> </button>
</div> </div>
{% endif %} {% endif %}
<div id="user-list"> <div id="user-list">
<div id="userlist-header"> <div id="userlist-header">
<h4 class='sidebar-title' id='userlist-title'>USERS</h4> <h4 class='sidebar-title' id='userlist-title'>{% trans 'USERS' %}</h4>
</div> </div>
<input class="user-list-filter" type="text" placeholder="Search people" /> <input class="user-list-filter" type="text" placeholder="Search people" />
<ul id="user_presences" class="filters scrolling_list"></ul> <ul id="user_presences" class="filters scrolling_list"></ul>
{% if show_invites %} {% if show_invites %}
<a id="invite-user-link" href="#invite-user" data-toggle="modal"><i class="icon-vector-plus-sign"></i>Invite coworkers</a> <a id="invite-user-link" href="#invite-user" data-toggle="modal"><i class="icon-vector-plus-sign"></i>{% trans 'Invite coworkers' %}</a>
{% endif %} {% endif %}
</div> </div>
<div id="group-pm-list"> <div id="group-pm-list">
<div id="group-pm-header"> <div id="group-pm-header">
<h4 class='sidebar-title' id='group-pm-title'>GROUP PMs</h4> <h4 class='sidebar-title' id='group-pm-title'>{% trans 'GROUP PMs' %}</h4>
</div> </div>
<ul id="group-pms" class="filters scrolling_list"> <ul id="group-pms" class="filters scrolling_list">
</ul> </ul>

View File

@@ -1,83 +1,82 @@
{% load i18n %}
<div class="modal hide" id="search-operators" tabindex="-1" role="dialog" <div class="modal hide" id="search-operators" tabindex="-1" role="dialog"
aria-labelledby="search-operators-label" aria-hidden="true"> aria-labelledby="search-operators-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="search-operators-label">Search help</h3> <h3 id="search-operators-label">{% trans 'Search help' %}</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<table class="table table-striped table-condensed table-rounded table-bordered" id="fmt_help_table"> <table class="table table-striped table-condensed table-rounded table-bordered" id="fmt_help_table">
<thead> <thead>
<tr> <tr>
<th>Operator</th> <th>{% trans 'Operator' %}</th>
<th>Effect</th> <th>{% trans 'Effect' %}</th>
</tr> </tr>
</thead> </thead>
<tr> <tr>
<td class="operator">stream:<span class="operator_value">stream</span></td> <td class="operator">stream:<span class="operator_value">stream</span></td>
<td class="definition">Narrow to messages on stream <span class="operator_value">stream</span></td> <td class="definition">{% trans 'Narrow to messages on stream' %} <span class="operator_value">stream</span></td>
</tr> </tr>
<tr> <tr>
<td class="operator">topic:<span class="operator_value">topic</span></td> <td class="operator">topic:<span class="operator_value">topic</span></td>
<td class="definition">Narrow to messages with topic <span class="operator_value">topic</span></td> <td class="definition">{% trans 'Narrow to messages with topic' %} <span class="operator_value">topic</span></td>
</tr> </tr>
<tr> <tr>
<td class="operator">pm-with:<span class="operator_value">email</span></td> <td class="operator">pm-with:<span class="operator_value">email</span></td>
<td class="definition">Narrow to private messages with <span class="operator_value">email</span></td> <td class="definition">{% trans 'Narrow to private messages with' %} <span class="operator_value">email</span></td>
</tr> </tr>
<tr> <tr>
<td class="operator">sender:<span class="operator_value">email</span></td> <td class="operator">sender:<span class="operator_value">email</span></td>
<td class="definition">Narrow to messages sent by <span class="operator_value">email</span></td> <td class="definition">{% trans 'Narrow to messages sent by' %} <span class="operator_value">email</span></td>
</tr> </tr>
<tr> <tr>
<td class="operator">sender:me</td> <td class="operator">sender:me</td>
<td class="definition">Narrow to messages sent by you.</td> <td class="definition">{% trans 'Narrow to messages sent by you' %}.</td>
</tr> </tr>
<tr> <tr>
<td class="operator">near:<span class="operator_value">id</span></td> <td class="operator">near:<span class="operator_value">id</span></td>
<td class="definition">Center the view around message ID <span class="operator_value">id</span></td> <td class="definition">{% trans 'Center the view around message ID' %} <span class="operator_value">id</span></td>
</tr> </tr>
<tr> <tr>
<td class="operator">id:<span class="operator_value">id</span></td> <td class="operator">id:<span class="operator_value">id</span></td>
<td class="definition">Narrow to just message ID <span class="operator_value">id</span></td> <td class="definition">{% trans 'Narrow to just message ID' %} <span class="operator_value">id</span></td>
</tr> </tr>
<tr> <tr>
<tr> <tr>
<td class="operator">is:alerted</td> <td class="operator">is:alerted</td>
<td class="definition">Narrow to messages with alert words.</td> <td class="definition">{% trans 'Narrow to messages with alert words' %}.</td>
</tr> </tr>
<td class="operator">is:mentioned</td> <td class="operator">is:mentioned</td>
<td class="definition">Narrow to messages that mention you.</td> <td class="definition">{% trans 'Narrow to messages that mention you' %}.</td>
</tr> </tr>
<tr> <tr>
<td class="operator">is:private</td> <td class="operator">is:private</td>
<td class="definition">Narrow to private messages.</td> <td class="definition">{% trans 'Narrow to private messages' %}.</td>
</tr> </tr>
<tr> <tr>
<td class="operator">is:starred</td> <td class="operator">is:starred</td>
<td class="definition">Narrow to starred messages.</td> <td class="definition">{% trans 'Narrow to starred messages' %}.</td>
</tr> </tr>
<tr> <tr>
<td class="operator"><span class="operator_value">keyword</span></td> <td class="operator"><span class="operator_value">keyword</span></td>
<td class="definition">Search for <span class="operator_value">keyword</span> in the topic or message content</td> <td class="definition">{% trans 'Search for' %} <span class="operator_value">{% trans 'keyword' %}</span> {% trans 'in the topic or message content' %}</td>
</tr> </tr>
<tr> <tr>
<td class="operator">-topic:<span class="operator_value">topic</span></td> <td class="operator">-topic:<span class="operator_value">topic</span></td>
<td class="definition">Exclude messages with topic <span class="operator_value">topic</span></td> <td class="definition">{% trans 'Exclude messages with topic' %} <span class="operator_value">topic</span></td>
</tr> </tr>
</table> </table>
<p>You can use any combination of these search operators in a <p>{% trans 'You can use any combination of these search operators in a single query' %}. {% trans 'For example' %}:</p>
single query. For example:</p>
<p>&nbsp; <span class="operator">stream:<span class="operator_value">streamname</span> <p>&nbsp; <span class="operator">stream:<span class="operator_value">streamname</span>
sender:<span class="operator_value">user@example.com</span> sender:<span class="operator_value">user@example.com</span>
<span class="operator_value">keyword</span></span></p> <span class="operator_value">keyword</span></span></p>
<p>would search for messages sent <p>{% trans 'would search for messages sent by' %} <span class="operator_value">user@example.com</span> {% trans 'to stream' %}
by <span class="operator_value">user@example.com</span> to stream
<span class="operator_value">streamname</span> <span class="operator_value">streamname</span>
containing the keyword <span class="operator_value">keyword</span>.</p> {% trans 'containing the keyword' %} <span class="operator_value">keyword</span>.</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Close</button> <button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">{% trans 'Close' %}</button>
</div> </div>
</div> </div>

View File

@@ -1,41 +1,42 @@
{% load i18n %}
<div class="modal hide" id="stream-creation" tabindex="-1" role="dialog" <div class="modal hide" id="stream-creation" tabindex="-1" role="dialog"
aria-labelledby="stream-creation-label" aria-hidden="true"> aria-labelledby="stream-creation-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="stream-creation-label">Create stream <span id="stream_name"></span></h3> <h3 id="stream-creation-label">{% blocktrans %}Create stream{% endblocktrans %} <span id="stream_name"></span></h3>
</div> </div>
<form id="stream_creation_form" class="form-inline"> <form id="stream_creation_form" class="form-inline">
<div class="modal-body"> <div class="modal-body">
<div id="make-invite-only"> <div id="make-invite-only">
<b>Stream accessibility</b><br /> <b>{% blocktrans %}Stream accessibility{% endblocktrans %}</b><br />
<label class="radio"> <label class="radio">
<input type="radio" name="privacy" value="public" checked /> <input type="radio" name="privacy" value="public" checked />
<span class="icon-vector-globe"></span> <span class="icon-vector-globe"></span>
Anyone can join {% blocktrans %}Anyone can join{% endblocktrans %}
</label><br /> </label><br />
<label class="radio"> <label class="radio">
<input type="radio" name="privacy" value="invite-only" /> <input type="radio" name="privacy" value="invite-only" />
<span class="icon-vector-lock"></span> <span class="icon-vector-lock"></span>
People must be invited {% blocktrans %}People must be invited{% endblocktrans %}
</label> </label>
</div> </div>
<div id="announce-new-stream"> <div id="announce-new-stream">
<br /> <br />
<label class="checkbox"> <label class="checkbox">
<input type="checkbox" name="announce" value="announce" checked /> <input type="checkbox" name="announce" value="announce" checked />
Announce stream {% blocktrans %}Announce stream{% endblocktrans %}
</label> </label>
<span class="icon-vector-question-sign" id="announce-stream-docs"></span> <span class="icon-vector-question-sign" id="announce-stream-docs"></span>
</div> </div>
<br /> <br />
<div class="control-group"> <div class="control-group">
<label class="control-label" for="people_to_add"><b>People to add</b></label><br /> <label class="control-label" for="people_to_add"><b>{% blocktrans %}People to add{% endblocktrans %}</b></label><br />
<div class="controls" id="people_to_add"></div> <div class="controls" id="people_to_add"></div>
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Cancel</button> <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">{% trans "Cancel" %}</button>
<button class="btn btn-primary" type="submit">Create</button> <button class="btn btn-primary" type="submit">{% trans "Create" %}</button>
</div> </div>
</form> </form>
</div> </div>

View File

@@ -1,7 +1,8 @@
{% load i18n %}
{# Subscriptions management tab of the app. #} {# Subscriptions management tab of the app. #}
<div class="subscriptions"> <div class="subscriptions">
<h1><i class="icon-vector-exchange streams-icon"></i>Streams</h1> <h1><i class="icon-vector-exchange streams-icon"></i>{% trans "Streams" %}</h1>
<div class="alert" id="subscriptions-status"></div> <div class="alert" id="subscriptions-status"></div>
<div id="subs_page_loading_indicator"></div> <div id="subs_page_loading_indicator"></div>
<div id="subscriptions_table"> <div id="subscriptions_table">

View File

@@ -1,15 +1,16 @@
{% load i18n %}
<div class="modal hide" id="tutorial-finale" tabindex="-1" role="dialog" <div class="modal hide" id="tutorial-finale" tabindex="-1" role="dialog"
aria-labelledby="tutorial-finale-label" aria-hidden="true"> aria-labelledby="tutorial-finale-label" aria-hidden="true">
<div class="modal-header"> <div class="modal-header">
<h3 id="tutorial-finale-label">Welcome to {{ product_name }}</h3> <h3 id="tutorial-finale-label">{% blocktrans %}Welcome to {{ product_name }}{% endblocktrans %}</h3>
</div> </div>
<div class="modal-body"> <div class="modal-body">
<p>Streams, topics, and narrowing make {{ product_name }} conversations <p>{% blocktrans %}Streams, topics, and narrowing make {{ product_name }} conversations
efficient and productive.</p> efficient and productive.{% endblocktrans %}</p>
<p>That's all there is to it, so let's get started!</p> <p>{% blocktrans %}That's all there is to it, so let's get started!{% endblocktrans %}</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button class="btn btn-primary" type="submit" id="tutorial-get-started">Get started</button> <button class="btn btn-primary" type="submit" id="tutorial-get-started">{% blocktrans %}Get started{% endblocktrans %}</button>
</div> </div>
</div> </div>

View File

@@ -1,12 +1,13 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h1>Unknown email unsubscribe request</h1> <h1>{% blocktrans %}Unknown email unsubscribe request{% endblocktrans %}</h1>
<p>Hi there! It looks like you tried to unsubscribe from something, but we don't <p>{% blocktrans %}Hi there! It looks like you tried to unsubscribe from something, but we don't
recognize the URL.</p> recognize the URL.{% endblocktrans %}</p>
<p>Please double-check that you have the full URL and try again, or <a href="mailto:{{ zulip_admin }}?Subject=Unsubscribe%20me%2C%20please!&Body=Hi%20there!%0A%0AI%20clicked%20this%20unsubscribe%20link%20in%20a%20Zulip%20e-mail%2C%20but%20it%20took%20me%20to%20an%20error%20page%3A%0A%0A_____________%0A%0APlease%20unsubscribe%20me.%0A%0AThanks%2C%0A_____________%0A">email us</a> and we'll get this squared away!</p> <p>{% blocktrans %}Please double-check that you have the full URL and try again, or <a href="mailto:{{ zulip_admin }}?Subject=Unsubscribe%20me%2C%20please!&Body=Hi%20there!%0A%0AI%20clicked%20this%20unsubscribe%20link%20in%20a%20Zulip%20e-mail%2C%20but%20it%20took%20me%20to%20an%20error%20page%3A%0A%0A_____________%0A%0APlease%20unsubscribe%20me.%0A%0AThanks%2C%0A_____________%0A">email us</a> and we'll get this squared away!{% endblocktrans %}</p>
{% endblock %} {% endblock %}

View File

@@ -1,11 +1,12 @@
{% extends "zerver/portico.html" %} {% extends "zerver/portico.html" %}
{% load i18n %}
{% block portico_content %} {% block portico_content %}
<h1>Email settings updated</h1> <h1>{% blocktrans %}Email settings updated{% endblocktrans %}</h1>
<p>We've updated your email subscription settings, and you won't get {{ subscription_type }} emails anymore.</p> <p>{% blocktrans %}We've updated your email subscription settings, and you won't get {{ subscription_type }} emails anymore.{% endblocktrans %}</p>
<p>To undo this change or review your other subscription settings, please visit your <a href="https://{{ external_host }}/#settings">Zulip Settings page</a>.</p> <p>{% blocktrans %}To undo this change or review your other subscription settings, please visit your <a href="https://{{ external_host }}/#settings">Zulip Settings page</a>{% endblocktrans %}.</p>
{% endblock %} {% endblock %}