[Flask] Babel tries...

Xavier somenxavier at gmail.com
Sun Dec 13 14:26:57 EST 2015


Hi,

I have a simply app:

# Imports
from flask import Flask, jsonify, request, make_response, render_template,
url_for, flash, redirect
from yaml import load, dump
try:
    from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
    from yaml import Loader, Dumper
from flask.ext.babel import Babel


# Global variables
version = "0.1"
app = Flask(__name__)
app.secret_key = 'el meu secret'

# Babel settings
app.config.from_pyfile('configuration.cfg')
babel = Babel(app)
LANGUAGES = {
    'en': 'English',
    'es': 'Español',
    'ca': 'Català'
}

@babel.localeselector
def get_locale():
    return request.accept_languages.best_match(LANGUAGES.keys())


# Main procedure
def create_new_activity():
    """It creates a new activity after a POST request"""
    flash(request.form.get('name'))
    flash(request.form.get('body'))
    flash(request.form.getlist('tags'))
    return redirect(url_for('add_activity'))

def show_new_activity_form():
    """It shows a form for create a new activity"""
    return render_template('add_activity.html')

@app.route("/add/", methods=['GET', 'POST'])
def add_activity():
    """Add a new activity to the collection"""
    if request.method == 'POST':
        return create_new_activity()
    else:
        return show_new_activity_form()


if __name__ == "__main__":
    app.run(debug=True)


My babel.cfg is

[python: **.py]
[jinja2: **/templates/**.html]
extensions=jinja2.ext.autoescape,jinja2.ext.with_

and my configuration.cfg is

BABEL_DEFAULT_LOCALE="en"




When I run
#!/usr/bin/env sh
pybabel extract -F babel.cfg -o messages.pot templates/
pybabel init -i messages.pot -d translations -l ca
pybabel init -i messages.pot -d translations -l en
pybabel init -i messages.pot -d translations -l es
pybabel compile -d translations

I get EMPTY (nothing to be translated) files, although in my templates I
have the base.html with words for translating:

<!DOCTYPE html>
<html>
  <head>
    <!-- Standard meta -->
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <!-- Robots -->
    <meta name="robots" content="index,follow" />
    <meta name="Revisit-After" content="10 Days" />
    <!-- Generator -->
    <meta name="generator" content="Flask" />
    <!-- title -->
    <title>{% block title %}{% endblock %} ∈ Activiteca </title>
    <!-- block of CSS and Javascript -->
    {% block css_js %}
    <!-- jQuery javascript -->
    <script src="
https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7"
crossorigin="anonymous">
    <!-- Bootstrap theme CSS -->
    <link rel="stylesheet" href="
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css"
integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r"
crossorigin="anonymous">
    <!-- Bootstrap javascript -->
    <script src="
https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS"
crossorigin="anonymous"></script>
    <!-- Icons -->
    <link rel="stylesheet" href="
https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css
">
    <!-- Some custom things -->
    <link rel="stylesheet" href="{{ url_for('static', filename='meu.css')
}}">
    {% endblock %}
  </head>
  <body>
    {% block header %}
    <header>
      <!-- begin: Main menu -->
      <nav class="navbar navbar-default" id="nav-global" role="navigation">
        <div class="container">
          <div class="navbar-header">
            <a class="navbar-brand" href="/"><i class="fa fa-home"></i>
Activiteca</a>
            <!-- collapsible button -->
            <button class="navbar-toggle collapsed" type="button"
data-toggle="collapse" data-target="#collapsing-menu" title="Menu"
aria-expanded="false">
    ☰
            </button>
          </div>
            <!-- collapsing menu -->
            <div class="collapse navbar-collapse" id="collapsing-menu">

              <ul class="nav navbar-nav navbar-right">
                <!-- Activities submenu -->
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-haspopup="true"
aria-expanded="false"><i class="fa fa-file"></i> {{ gettext("Activity") }}
<span class="caret"></span></a>
                    <ul class="dropdown-menu">
                      <li><a href="{{ url_for('add_activity') }}"
title="Add activity">{{ gettext("Add") }}</a></li>
                      <li><a href="#">List</a></li>
                    </ul>
                </li>
              </ul>
            </div>
        </div>
      </nav>
      <!-- final: Main menu -->
     </header>
    {% endblock %}
    <div class="container">
      <div class="section">
         {% block content %}{% endblock %}
      </div>
    </div>
   {% block footer %}
    <!-- the footer -->
    <footer class="footer">
      <div class="container">
             <p><small><a rel="license" href="
http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons
License" style="border-width:0" src="
http://mirrors.creativecommons.org/presskit/buttons/88x31/svg/by.svg"
width="88"/></a></small></p>
             <p><small>Except where otherwise noted, the content on <a
xmlns:cc="http://creativecommons.org/ns#" href="
http://activiteca.somenxavier.xyz" property="cc:attributionName"
rel="cc:attributionURL">this site</a> is licensed under a <a rel="license"
href="http://creativecommons.org/licenses/by/4.0/">Creative Commons
Attribution 4.0 International license</a>.</small></p>
      </div>
    </footer>
    <!-- ends the footer -->
    {% endblock %}
  </body>
</html>


Any hints?

Thanks,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/flask/attachments/20151213/e6f7048a/attachment.html>


More information about the Flask mailing list