commit b471dbdd7b0946d8cd09d033f5e1f622ef029595
parent 880aa553ab1301a7d08145c7da81bc755f326fff
Author: Antoine Amarilli <a3nm@a3nm.net>
Date: Tue, 27 Dec 2011 16:13:17 +0100
french localization
Diffstat:
9 files changed, 218 insertions(+), 33 deletions(-)
diff --git a/TODO b/TODO
@@ -1,4 +1,4 @@
-TODO: dos2unix
-TODO: placement in rhymes for enlacement?
-TODO: group multiple derivations for each word,phon
-TODO: query.sh and db_sqlite.py
+dos2unix
+placement in rhymes for enlacement?
+group multiple derivations for each word,phon
+query.sh and db_sqlite.py
diff --git a/drime.py b/drime.py
@@ -5,13 +5,18 @@ from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
+def get_locale():
+ return request.accept_languages.best_match(['en', 'fr'])
+
@app.route('/')
def root():
- return render_template('index.html', title="drime", noform=True)
+ return render_template('index.html', title="drime", noform=True,
+ lang=get_locale())
@app.route('/about')
def about():
- return render_template('about.html', title="drime")
+ return render_template('about.html', title="drime", pagesize=query.PAGESIZE,
+ lang=get_locale())
@app.route('/query')
def q():
@@ -29,6 +34,7 @@ def q():
d['page'] = 0
try:
r, count = query.query(**d)
+ d['lang'] = get_locale()
d['pagesize'] = query.PAGESIZE
d['mode'] = 'query'
d['title'] = 'drime'
@@ -54,6 +60,7 @@ def q():
return render_template('results.html', **d)
except query.BadValues:
d['mode'] = 'query'
+ d['lang'] = get_locale()
if request.args.get('json'):
return jsonify(d)
return render_template('error.html', **d)
diff --git a/templates/about.html b/templates/about.html
@@ -1,6 +1,78 @@
{% extends "page.html" %}
{% block body %}
+{% if lang == 'fr' %}
+<p>Bienvenue sur <strong>drime</strong> !</p>
+
+<h2 id="info">Qu'est-ce que c'est ?</h2>
+<p>C'est un dictionnaire de rimes (par <a href="http://a3nm.net">a3nm</a>). Il
+utilise la base de données <a href="http://www.lexique.org/">Lexique</a> avec
+quelques changements, et utilise également <a
+ href="http://python.org">Python</a>, <a href="http://mysql.com">MySQL</a> et
+<a href="http://flask.pocoo.org">Flask</a>. Vous pouvez téléchager le code sur
+le <a href="http://gitorious.org/drime">dépôt gitorious de drime</a> si vous
+voulez le faire fonctionner sur votre machine.</p>
+
+<h2 id="help">Comment je m'en sers ?</h2>
+<p>Dans le champ <strong>mot</strong>, entrez le mot pour lequel vous voulez
+obtenir des rimes. Le système ne sait pas (encore) inférer la prononciation de
+mots inconnus ; abstenez-vous donc d'utiliser des noms propres ou des mots
+trop rares. Vous pouvez également fournir une prononcation <a
+ href="#pron">X-SAMPA</a> entre crochets pour choisir entre plusieurs
+prononciations possibles. Par exemple : <a
+ href="/query?query=fils%20[fis]">fils [fis]</a>.</p>
+
+<p>Dans le champ <strong>n_syllabes</strong>, vous pouvez indiquer un nombre de
+syllabes pour limiter les résultats retournés. Vous pouvez spécifier un nombre
+exact ou un intervalle (par exemple "1-3"). Vous pouvez ajouter "+" à la fin
+pour indiquer que vous autorisez une syllabe supplémentaire à condition que le
+mot commence par une voyelle ou un "h" non-aspiré, ce qui est peut être utile
+dans le cas où le mot précédent dans votre poème se termine par un "e" qui
+serait alors élidé. Le comptage des syllabes est approximatif : si le
+système a un doute sur un mot, il l'incluera à tort plutôt que de le rejeter à
+tort.</p>
+
+<p>En cochant la case <strong>genre</strong>, vous forcez les résultats à
+fournir une rime de même genre que votre requête. Si vous ne savez pas ce que
+sont les rimes masculines ou féminines, vous pouvez regarder. <a
+ href="https://fr.wikipedia.org/wiki/Rime#Genre_des_rimes_:_rimes_f.C3.A9minines_et_masculines">la
+page Wikipédia à ce propos</a>.</p>
+
+<h2>Quels sont les résultats manquants ? (faux négatifs)</h2>
+<ul>
+<li>Le système ne fournira que des mots de son dictionnaire comme rimes. En
+particulier, il ne fournira pas de noms propres.</li>
+<li>Le système ne fournira que des mots qui riment (ie. tous les sons jusqu'à la
+dernière voyelle incluse correspondent exactement) ou dont les trois derniers
+caratères au moins sont les mêmes (pour les rimes normandes).</li>
+<li>Le système peut se tromper si la prononciation qu'il connaît pour un mot est
+mauvaise, ou s'il manque des variantes. Du reste, le système exige des
+correspondances exactes (par exemple, il fait la distinction "brun/brin",
+c'est-à-dire la distinction entre "9~" et "E~").</li>
+<li>Le système éliminera les résultats qu'il considère comme redondants, ie. des
+résultats dérivés d'un autre résultat mieux classé.</li>
+<li>Le système ne renvoie que les {{ pagesize }} meilleurs résulats.</li>
+</ul>
+
+<h2>Comment les résultats sont-ils triés ?</h2>
+<p>Les critères appliqués, dans l'ordre, sont : le nombre de phonèmes
+communs, le nombre de caractères communs, et la fréquence du mot dans un
+corpus.</p>
+
+<h2 id="pron">Comment la prononciation est-elle indiquée ?</h2>
+<p>Avec <a href="http://en.wikipedia.org/wiki/X-SAMPA">X-SAMPA</a>. Voyez aussi <a
+ href="https://fr.wiktionary.org/wiki/Annexe:Prononciation/fran%C3%A7ais">l'annexe
+ de Wiktionnaire sur la prononciation du français</a>. Notez qu'en raison de
+limitations de Lexique, la prononciation indiquée est une prononciation orale et
+non une prononciation poétique. Par exemple, "placement" est référencé comme
+"plasmA~" but serait "plas@mA~"). Des heuristiques sont utilisées afin de
+compenser ça lorsque les résultats sont filtrés sur le nombre de syllabes.</p>
+
+<h2>D'où vient le nom ?</h2>
+
+<p>Ça se prononce [dRim]. C'est une abréviation de "dictionnaire de rimes", et
+un jeu de mots avec l'anglais "dream".</p>
+{% else %}
<p>Welcome to <strong>drime</strong>!</p>
<h2 id="info">Wait, what is this?</h2>
<p>This is <a href="http://a3nm.net">a3nm</a>'s attempt to build a better French
@@ -27,29 +99,28 @@ estimation is always done to overapproximate the results of a given query.</p>
gender. If you're unsure about what this is, see <a
href="https://fr.wikipedia.org/wiki/Rime#Genre_des_rimes_:_rimes_f.C3.A9minines_et_masculines">the
relevant Wikipedia page (in French)</a>.</p>
-<p>The system will ask you to select the exact word and pronunciation in case of
-doubt. Results will then be provided.</p>
<h2>Which results are missing? (false negatives)</h2>
<ul>
<li>The system will only provide words from its dictionary. No proper nouns, for
instance.</li>
<li>The system will only provide words which either rhyme (ie. all sounds up to
-the last vowel match exactly) or which share the last three characters (for
-visual rhymes).</li>
+and including the last vowel match exactly) or which share the last three
+characters (for visual rhymes).</li>
<li>The system might be fooled because its pronunciation for a word is mistaken
or does not include all variants. Besides, the system is picky about phonemic
distinctions (notably "brun/brin", ie. "9~/E~").</li>
<li>The system will eliminate results that it considers redundant, ie. results
derived from a previous result.</li>
+<li>The system will only return the {{ pagesize }} best results.</li>
</ul>
<h2>Which results are unnecessary? (false positives)</h2>
<ul>
<li>The system will provide words which are too similar to the query word to
-make a decent rhyme with it.</li>
+make a decent rhyme with it (eg. "reprendre" for "prendre").</li>
<li>The system will provide results with a wrong syllable count.</li>
-<li>The system will provide abusive visual rhymes.</li>
+<li>The system will provide abusive visual rhymes (at the end of the results).</li>
</ul>
<h2>How are results sorted?</h2>
@@ -70,5 +141,6 @@ number of syllables.</p>
<p>It's pronounced [dRim], as a pun with "dream" (the dream rhyme dictionary)
but also because it is short for "dictionnaire de rimes" in French.</p>
+{% endif %}
{% endblock %}
diff --git a/templates/disambig.html b/templates/disambig.html
@@ -1,7 +1,11 @@
{% extends "page.html" %}
{% block body %}
+{% if lang == 'fr' %}
+<p>Que vouliez-vous dire ?</p>
+{% else %}
<p>Did you mean:</p>
+{% endif %}
<ul id="disambig">
{% for k in keys %}
<li class="{{ loop.cycle('odd', 'even') }}">
diff --git a/templates/error.html b/templates/error.html
@@ -1,6 +1,11 @@
{% extends "page.html" %}
{% block body %}
+{% if lang == 'fr' %}
+<p>Les valeurs fournies sont incorrectes. <a href="/about#help">Besoin
+ d'aide ?</a></p>
+{% else %}
<p>Invalid values supplied. Need some <a href="/about#help">help</a>?</p>
+{% endif %}
{% endblock %}
diff --git a/templates/index.html b/templates/index.html
@@ -1,15 +1,36 @@
{% extends "page.html" %}
{% block body %}
- <form method="GET" action="query" id="bigform">
- <label for="query">French word to get rhymes for:</label><br />
+<form method="GET" action="query" id="bigform">
+ <label for="query">
+ {% if lang == 'fr' %}
+ Mot pour lequel vous voulez des rimes :
+ {% else %}
+ French word to get rhymes for:
+ {% endif %}
+ </label><br />
<input id="query" name="query"
+ {% if lang == 'fr' %}
+ placeholder="mot"
+ {% else %}
placeholder="word"
+ {% endif %}
value="{{ q }}"/><br />
- <label for="nsyl">Number of syllables of the rhymes:<br />
- (Leave blank to get all rhymes.)</label><br />
+ <label for="nsyl">
+ {% if lang == 'fr' %}
+ Nombre de syllabes pour les rimes :<br />
+ (Laissez vide pour obtenir toutes les rimes.)
+ {% else %}
+ Number of syllables of the rhymes:<br />
+ (Leave blank to get all rhymes.)
+ {% endif %}
+ </label><br />
<input id="nsyl" name="nsyl"
+ {% if lang == 'fr' %}
+ placeholder="n_syllabes"
+ {% else %}
placeholder="n_syllables"
+ {% endif %}
value="{{ nsyl }}"/><br />
<label id="gender_label">
<input type="checkbox" id="gender" name="gender"
@@ -17,8 +38,19 @@
checked="{{ gender }}"
{% endif %}
/>
- Only rhymes of matching gender?</label><br />
- <input id="submit" type="submit" value="Search" />
+ {% if lang == 'fr' %}
+ Respecter le genre des rimes ?
+ {% else %}
+ Only rhymes of matching gender?
+ {% endif %}
+ </label><br />
+ <input id="submit" type="submit"
+ {% if lang == 'fr' %}
+ value="Chercher"
+ {% else %}
+ value="Search"
+ {% endif %}
+ />
</form>
{% endblock %}
diff --git a/templates/notfound.html b/templates/notfound.html
@@ -1,7 +1,12 @@
{% extends "page.html" %}
{% block body %}
+{% if lang == 'fr' %}
+<p>Aucun mot connu ne correspond à cette requête. Assurez-vous que vous utilisez
+bien un mot du dictionnaire. <a href="/about#help">Besoin d'aide ?</a></p>
+{% else %}
<p>No known word matches this query. Make sure you're using a word from the
dictionary. Need some <a href="/about#help">help</a>?</p>
+{% endif %}
{% endblock %}
diff --git a/templates/page.html b/templates/page.html
@@ -9,16 +9,28 @@
<body>
<header>
<h1><a href="/">drime</a></h1>
- <sup><a id="about" href="/about">about</a></sup>
+ <sup><a id="about" href="/about">
+ {% if lang == 'fr' %}
+ aide
+ {% else %}
+ help
+ {% endif %}
+ </a></sup>
{% if not noform %}
<form method="GET" action="query">
- <label class="redundant" for="query">Word</label>
<input id="query" name="query"
- placeholder="word"
+ {% if lang == 'fr' %}
+ placeholder="mot"
+ {% else %}
+ placeholder="word"
+ {% endif %}
value="{{ q }}"/>
- <label class="redundant" for="nsyl">Number of syllables</label>
<input id="nsyl" name="nsyl"
- placeholder="n_syllables"
+ {% if lang == 'fr' %}
+ placeholder="n_syllabes"
+ {% else %}
+ placeholder="n_syllables"
+ {% endif %}
value="{{ nsyl }}"/>
<label id="gender_label">
<input type="checkbox" id="gender" name="gender"
@@ -26,8 +38,19 @@
checked="{{ gender }}"
{% endif %}
/>
- gender?</label>
- <input type="submit" value="Search" />
+ {% if lang == 'fr' %}
+ genre ?
+ {% else %}
+ gender?
+ {% endif %}
+ </label>
+ <input type="submit"
+ {% if lang == 'fr' %}
+ value="Chercher"
+ {% else %}
+ value="Search"
+ {% endif %}
+ />
</form>
{% endif %}
</header>
diff --git a/templates/results.html b/templates/results.html
@@ -2,23 +2,60 @@
{% block body %}
<div>
-<p id="result_header">Displaying
-{{ displayed }} result{% if displayed != 1 %}s{% endif %}
+<p id="result_header">
+{% if lang == 'fr' %}
+Affichage de
+{% else %}
+Displaying
+{% endif %}
+{{ displayed }}
+{% if lang == 'fr' %}
+résultat{% if displayed > 1 %}s{% endif %}
+{% else %}
+result{% if displayed != 1 %}s{% endif %}
+{% endif %}
{# results
{{ page * pagesize + 1 }} to {{ (page+1) * pagesize }} #}
{% if displayed < count %}
-of {{ count }}
-total result{% if count != 1 %}s{% endif %}
+{% if lang == 'fr' %}
+sur
+{% else %}
+of
+{% endif %}
+of
+{{ count }}
+{% if lang == 'fr' %}
+sur
+{% else %}
+{% if count != 1 %}résultats totaux{% else %}résultat total{% endif %}
+{% endif %}
+{% endif %}
+{% if lang == 'fr' %}
+pour :
+{% else %}
+for:
{% endif %}
-for: <strong>{{ keys[0][-1] }}</strong></p>
+<strong>{{ keys[0][-1] }}</strong></p>
<table>
<tr>
- <th id="col_word">word</th>
- <th id="col_pron">pron<a href="/about/#pron" class="help">?</a></th>
+ <th id="col_word">{% if lang == 'fr' %}mot{% else %}word{% endif %}</th>
+ <th id="col_pron">
+ {% if lang == 'fr' %}
+ prononciation<a href="/about/#pron" class="help">?</a>
+ {% else %}
+ pronunciation<a href="/about/#pron" class="help">?</a>
+ {% endif %}
+ </th>
<th id="col_phon">phon</th>
<th id="col_eye">eye</th>
<th id="col_freq">freq</th>
- <th id="col_deriations">derivations</th>
+ <th id="col_deriations">
+ {% if lang == 'fr' %}
+ dérivations
+ {% else %}
+ derivations
+ {% endif %}
+ </th>
{% for r in result %}
<tr class="{{ loop.cycle('odd', 'even') }}">
<td>{{ r.word }}</td>