├── .gitignore ├── README.md ├── app ├── README.md ├── __init__.py ├── local_settings.py ├── models │ ├── __init__.py │ └── user_models.py ├── settings.py ├── static │ └── css │ │ └── global.css ├── templates │ ├── layout.html │ ├── members │ │ └── profile.html │ ├── public │ │ └── home_page.html │ └── security │ │ ├── _macros.html │ │ ├── _menu.html │ │ ├── _messages.html │ │ ├── change_password.html │ │ ├── email │ │ ├── change_notice.html │ │ ├── change_notice.txt │ │ ├── confirmation_instructions.html │ │ ├── confirmation_instructions.txt │ │ ├── login_instructions.html │ │ ├── login_instructions.txt │ │ ├── reset_instructions.html │ │ ├── reset_instructions.txt │ │ ├── reset_notice.html │ │ ├── reset_notice.txt │ │ ├── welcome.html │ │ └── welcome.txt │ │ ├── forgot_password.html │ │ ├── login_user.html │ │ ├── register_user.html │ │ ├── reset_password.html │ │ ├── send_confirmation.html │ │ └── send_login.html ├── translations │ ├── da_DK │ │ └── LC_MESSAGES │ │ │ ├── flask_security.mo │ │ │ └── flask_security.po │ ├── de_DE │ │ └── LC_MESSAGES │ │ │ ├── flask_security.mo │ │ │ └── flask_security.po │ ├── flask_security.pot │ ├── fr_FR │ │ └── LC_MESSAGES │ │ │ ├── flask_security.mo │ │ │ └── flask_security.po │ ├── nl_NL │ │ └── LC_MESSAGES │ │ │ └── messages.po │ └── ru_RU │ │ └── LC_MESSAGES │ │ ├── flask_security.mo │ │ └── flask_security.po └── views │ ├── __init__.py │ ├── members_views.py │ └── public_views.py ├── requirements.txt ├── test └── t.py └── wsgi.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | app.sqlite 3 | .cache 4 | *.pyc 5 | env 6 | venv 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![alt Flask-Admin ](https://habrastorage.org/webt/fb/w2/42/fbw242ettd1fay8l4rwt3xtd-ac.png) 2 | ![alt Flask-security ](https://habrastorage.org/webt/hq/ep/wj/hqepwjev4pucazix5ztzqw9pvk0.png) 3 | 4 | # Flask-Securyty & Flask-Admin & MongoDB in one app 5 | 6 | This code base serves as starting point for writing your next Flask application. 7 | 8 | ## Code characteristics 9 | 10 | * Well organized directories with lots of comments 11 | * app 12 | * models 13 | * static 14 | * templates 15 | * views 16 | * Sends error emails to admins for unhandled exceptions 17 | 18 | 19 | ## Setting up a development environment 20 | 21 | We assume that you have `git`, `virtualenv` and `mongoDB` installed. 22 | 23 | cd ~ 24 | virtualenv env 25 | . env/bin/activate 26 | mkdir -p ~/www/my_app 27 | cd www 28 | git clone https://github.com/Alexmod/flask-security-flask-admin-mongodb.git my_app 29 | cd my_app/ 30 | pip install -r requirements.txt 31 | 32 | 33 | # Configuring SMTP 34 | 35 | Edit the `local_settings.py` file. 36 | 37 | Specifically set all the MAIL_... settings to match your SMTP settings 38 | 39 | Note that Google's SMTP server requires the configuration of "less secure apps". 40 | See https://support.google.com/accounts/answer/6010255?hl=en 41 | 42 | Note that Yahoo's SMTP server requires the configuration of "Allow apps that use less secure sign in". 43 | See https://help.yahoo.com/kb/SLN27791.html 44 | 45 | 46 | 47 | ## Running the app 48 | 49 | # Start the Flask development web server 50 | flask run --host=0.0.0.0 51 | 52 | 53 | Point your web browser to http://your_ip:5000/ 54 | 55 | You can make use of the following users: 56 | - email `user@example.com` with password `Password1`. 57 | - email `admin@example.com` with password `Password1`. 58 | -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | # app directory 2 | 3 | This directory contains the Flask application code. 4 | 5 | The code has been organized into the following sub-directories: 6 | 7 | # Sub-directories 8 | models # Database Models and their Forms 9 | static # Static asset files that will be mapped to the "/static/" URL 10 | templates # Jinja2 HTML template files 11 | views # View functions 12 | 13 | -------------------------------------------------------------------------------- /app/__init__.py: -------------------------------------------------------------------------------- 1 | import os.path as op 2 | 3 | from flask import Flask 4 | from flask_admin import Admin 5 | from flask_admin.base import MenuLink 6 | from flask_admin.contrib.fileadmin import FileAdmin 7 | from flask_admin.contrib.mongoengine import ModelView 8 | from flask_babelex import Babel 9 | from flask_bootstrap import Bootstrap 10 | from flask_mail import Mail 11 | from flask_migrate import Migrate 12 | from flask_mongoengine import MongoEngine 13 | from flask_security import MongoEngineUserDatastore, Security 14 | from flask_wtf.csrf import CSRFProtect 15 | 16 | 17 | # Instantiate Flask extensions 18 | db = MongoEngine() 19 | csrf_protect = CSRFProtect() 20 | mail = Mail() 21 | migrate = Migrate() 22 | babel = Babel() 23 | security = Security() 24 | 25 | 26 | def create_app(extra_config_settings={}): 27 | # Create a Flask applicaction. 28 | 29 | # Instantiate Flask 30 | app = Flask(__name__) 31 | 32 | # Load App Config settings 33 | # Load common settings from 'app/settings.py' file 34 | app.config.from_object('app.settings') 35 | # Load local settings from 'app/local_settings.py' 36 | app.config.from_object('app.local_settings') 37 | # Load extra config settings from 'extra_config_settings' param 38 | app.config.update(extra_config_settings) 39 | 40 | # Setup db Mongo 41 | db.init_app(app) 42 | 43 | # Setup Flask-Mail 44 | mail.init_app(app) 45 | 46 | # Setup WTForms CSRFProtect 47 | csrf_protect.init_app(app) 48 | 49 | # Register blueprints 50 | from app.views.public_views import public_blueprint 51 | app.register_blueprint(public_blueprint) 52 | from app.views.members_views import members_blueprint 53 | app.register_blueprint(members_blueprint) 54 | 55 | # Setup an error-logger to send emails to app.config.ADMINS 56 | init_email_error_handler(app) 57 | 58 | # Setup Flask-secure 59 | from .models.user_models import User, Role 60 | app.user_datastore = MongoEngineUserDatastore(db, User, Role) 61 | security.init_app(app, app.user_datastore) 62 | # datastore.create_user(email='matt@nobien.net', password='password') 63 | 64 | Bootstrap(app) # Initialize flask_bootstrap 65 | 66 | babel.init_app(app) # Initialize flask_babelex 67 | 68 | # Define bootstrap_is_hidden_field for flask-bootstrap's bootstrap_wtf.html 69 | from wtforms.fields import HiddenField 70 | 71 | def is_hidden_field_filter(field): 72 | return isinstance(field, HiddenField) 73 | 74 | app.jinja_env.globals['bootstrap_is_hidden_field'] = is_hidden_field_filter 75 | 76 | # Setup Flask-admin 77 | class AdminUserView(ModelView): 78 | can_create = False 79 | column_exclude_list = ('password') 80 | form_overrides = dict(password=HiddenField) 81 | 82 | admin = Admin(app, template_mode='bootstrap3') 83 | admin.add_view(AdminUserView(User)) 84 | admin.add_view(ModelView(Role)) 85 | path = op.join(op.dirname(__file__), 'static') 86 | admin.add_view(FileAdmin(path, '/static/', name='Files')) 87 | admin.add_link(MenuLink(name='Profile', endpoint='members.member_page')) 88 | admin.add_link(MenuLink(name='Logout', endpoint='security.logout')) 89 | 90 | return app 91 | 92 | 93 | def init_email_error_handler(app): 94 | # Initialize a logger to send emails on error-level messages. 95 | # Unhandled exceptions will now send an email message to app.config.ADMINS. 96 | if app.debug: 97 | return # Do not send error emails while developing 98 | 99 | # Retrieve email settings from app.config 100 | host = app.config['MAIL_SERVER'] 101 | port = app.config['MAIL_PORT'] 102 | from_addr = app.config['MAIL_DEFAULT_SENDER'] 103 | username = app.config['MAIL_USERNAME'] 104 | password = app.config['MAIL_PASSWORD'] 105 | secure = () if app.config.get('MAIL_USE_TLS') else None 106 | 107 | # Retrieve app settings from app.config 108 | to_addr_list = app.config['ADMINS'] 109 | subject = app.config.get('APP_SYSTEM_ERROR_SUBJECT_LINE', 'System Error') 110 | 111 | # Setup an SMTP mail handler for error-level messages 112 | import logging 113 | from logging.handlers import SMTPHandler 114 | 115 | mail_handler = SMTPHandler( 116 | mailhost=(host, port), # Mail host and port 117 | fromaddr=from_addr, # From address 118 | toaddrs=to_addr_list, # To address 119 | subject=subject, # Subject line 120 | credentials=(username, password), # Credentials 121 | secure=secure, 122 | ) 123 | 124 | # Log errors using: app.logger.error('Some error message') 125 | mail_handler.setLevel(logging.ERROR) 126 | app.logger.addHandler(mail_handler) 127 | -------------------------------------------------------------------------------- /app/local_settings.py: -------------------------------------------------------------------------------- 1 | from datetime import timedelta 2 | import os 3 | 4 | # ***************************** 5 | # Environment specific settings 6 | # ***************************** 7 | 8 | # DO NOT use "DEBUG = True" in production environments 9 | DEBUG = True 10 | 11 | # DO NOT use Unsecure Secrets in production environments 12 | # Generate a safe one with: 13 | # python -c "import os; print(repr(os.urandom(24)));" 14 | SECRET_KEY = 'DO_NOT_use_Unsecure_Secrets_in_production_environments' 15 | COOKIE_SECURE = 'Secure' 16 | COOKIE_DURATION = timedelta(days=365) 17 | 18 | # MongoDB Config 19 | MONGODB_DB = 'mydatabase' 20 | MONGODB_HOST = 'localhost' 21 | MONGODB_PORT = 27017 22 | 23 | # Flask Security 24 | SECURITY_PASSWORD_SALT = 'DO_NOT_use_Unsecure_Secrets_in_production' 25 | SECURITY_REGISTERABLE = True 26 | SECURITY_POST_LOGIN_VIEW = 'members.member_page' 27 | SECURITY_RECOVERABLE = True 28 | SECURITY_CHANGEABLE = True 29 | 30 | 31 | # i18n 32 | BABEL_TRANSLATION_DIRECTORIES = os.path.join(os.path.abspath( 33 | os.path.dirname(__file__)), 'translations/') 34 | 35 | BABEL_DEFAULT_LOCALE = 'ru_RU' 36 | 37 | # Flask-Mail settings 38 | # For smtp.gmail.com to work, you MUST set "Allow less secure apps" 39 | # to ON in Google Accounts. 40 | # Change it in https://myaccount.google.com/security#connectedapps 41 | # (near the bottom). 42 | 43 | 44 | MAIL_SERVER = 'smtp.gmail.com' 45 | MAIL_PORT = 587 46 | MAIL_USE_SSL = False 47 | MAIL_USE_TLS = True 48 | MAIL_USERNAME = 'yourname@gmail.com' 49 | MAIL_PASSWORD = 'password' 50 | MAIL_DEFAULT_SENDER = '"Your Name" ' 51 | 52 | ADMINS = [ 53 | '"Admin One" ', 54 | ] 55 | -------------------------------------------------------------------------------- /app/models/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/models/__init__.py -------------------------------------------------------------------------------- /app/models/user_models.py: -------------------------------------------------------------------------------- 1 | from flask_security import UserMixin, RoleMixin 2 | from app import db 3 | 4 | 5 | class Role(db.Document, RoleMixin): 6 | name = db.StringField(max_length=80, unique=True) 7 | description = db.StringField(max_length=255) 8 | 9 | def __unicode__(self): 10 | return self.name 11 | 12 | 13 | class User(db.Document, UserMixin): 14 | email = db.StringField(max_length=255) 15 | password = db.StringField(max_length=255) 16 | active = db.BooleanField(default=True) 17 | confirmed_at = db.DateTimeField() 18 | roles = db.ListField(db.ReferenceField(Role), default=[]) 19 | -------------------------------------------------------------------------------- /app/settings.py: -------------------------------------------------------------------------------- 1 | # Settings common to all environments (development|staging|production) 2 | # Place environment specific settings in env_settings.py 3 | # An example file (env_settings_example.py) can be used as a starting point 4 | 5 | # Application settings 6 | APP_NAME = "Example.com" 7 | APP_SYSTEM_ERROR_SUBJECT_LINE = APP_NAME + " system error" 8 | 9 | # Flask settings 10 | CSRF_ENABLED = True 11 | -------------------------------------------------------------------------------- /app/static/css/global.css: -------------------------------------------------------------------------------- 1 | /* Sticky footer styles 2 | * -------------------------------------------------- */ 3 | 4 | html { 5 | position: relative; 6 | min-height: 100%; 7 | } 8 | 9 | body { 10 | /* Margin bottom by footer height */ 11 | margin-bottom: 60px; 12 | } 13 | 14 | .footer { 15 | position: absolute; 16 | bottom: 0; 17 | width: 100%; 18 | /* Set the fixed height of the footer here */ 19 | height: 60px; 20 | background-color: #f5f5f5; 21 | } 22 | 23 | body>.container { 24 | padding: 60px 15px 0; 25 | } 26 | 27 | .container .text-muted { 28 | margin: 20px 0; 29 | } 30 | 31 | .footer>.container { 32 | padding-right: 15px; 33 | padding-left: 15px; 34 | } 35 | 36 | code { 37 | font-size: 80%; 38 | } 39 | -------------------------------------------------------------------------------- /app/templates/layout.html: -------------------------------------------------------------------------------- 1 | 2 | {% extends "bootstrap/base.html" %} 3 | {% block title %}This is an example page{% endblock %} 4 | {% import "bootstrap/fixes.html" as fixes %} 5 | {% block head %} 6 | {{super()}} 7 | {{fixes.ie8()}} 8 | {% endblock %} 9 | 10 | {% block styles %} 11 | {{super()}} 12 | 13 | {% endblock %} 14 | 15 | {% block body %} 16 | 17 | {% block navbar %} 18 | 50 | 51 | {% endblock %} 52 | 53 | 54 |
55 |
56 | 57 | {% import "bootstrap/utils.html" as utils %} {{ utils.flashed_messages(dismissible=True, container=False) }} 58 | {% block content %}{% endblock %} 59 | 60 |
61 |
62 | 63 |
64 |
65 |

© {{ config.get('APP_NAME') }}

66 |
67 |
68 | 69 | {% block scripts %} 70 | {{super()}} 71 | {% endblock %} 72 | 73 | 74 | 75 | {% endblock %} 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /app/templates/members/profile.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 |

{%trans%}Profile{%endtrans%}

4 | {{ _('Change Password') }} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /app/templates/public/home_page.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | 3 | {% block content %} 4 |

{%trans%}Home Page{%endtrans%}

5 |

{%trans%}Register{%endtrans%}

6 |

{%trans%}Login{%endtrans%}

7 |

{%trans%}Home Page{%endtrans%} (accessible to anyone)

8 |

{%trans%}Profile{%endtrans%} (login_required: user@example.com / Password1)

9 |

{%trans%}Admin Page{%endtrans%} (roles_required: admin@example.com / Password1)

10 |

{%trans%}Logout{%endtrans%}

11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /app/templates/security/_macros.html: -------------------------------------------------------------------------------- 1 | {% macro render_field_with_errors(field) %} 2 |
3 | {{ field.label }} {{ field(**kwargs)|safe }} 4 | {% if field.errors %} 5 |
    6 | {% for error in field.errors %} 7 |
  • {{ error }}
  • 8 | {% endfor %} 9 |
10 | {% endif %} 11 |
12 | {% endmacro %} 13 | 14 | {% macro render_field(field) %} 15 |
16 | {{ field(**kwargs)|safe }} 17 |
18 | {% endmacro %} 19 | -------------------------------------------------------------------------------- /app/templates/security/_menu.html: -------------------------------------------------------------------------------- 1 | {% if security.registerable or security.recoverable or security.confirmable %} 2 |

{{ _('Menu') }}

3 | 15 | {% endif %} 16 | -------------------------------------------------------------------------------- /app/templates/security/_messages.html: -------------------------------------------------------------------------------- 1 | {%- with messages = get_flashed_messages(with_categories=true) -%} 2 | {% if messages %} 3 | 8 | {% endif %} 9 | {%- endwith %} 10 | -------------------------------------------------------------------------------- /app/templates/security/change_password.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 4 | {% include "security/_messages.html" %} 5 |

{{ _('Change password') }}

6 |
7 | {{ change_password_form.hidden_tag() }} 8 | {{ render_field_with_errors(change_password_form.password, class_="form-control") }} 9 | {{ render_field_with_errors(change_password_form.new_password, class_="form-control") }} 10 | {{ render_field_with_errors(change_password_form.new_password_confirm, class_="form-control") }} 11 | {{ render_field(change_password_form.submit, class_="btn btn-default") }} 12 |
13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /app/templates/security/email/change_notice.html: -------------------------------------------------------------------------------- 1 |

{{ _('Your password has been changed.') }}

2 | {% if security.recoverable %} 3 |

{{ _('If you did not change your password,') }} {{ _('click here to reset it') }}.

4 | {% endif %} 5 | -------------------------------------------------------------------------------- /app/templates/security/email/change_notice.txt: -------------------------------------------------------------------------------- 1 | {{ _('Your password has been changed') }} 2 | {% if security.recoverable %} 3 | {{ _('If you did not change your password, click the link below to reset it.') }} 4 | {{ url_for_security('forgot_password', _external=True) }} 5 | {% endif %} 6 | -------------------------------------------------------------------------------- /app/templates/security/email/confirmation_instructions.html: -------------------------------------------------------------------------------- 1 |

{{ _('Please confirm your email through the link below:') }}

2 | 3 |

{{ _('Confirm my account') }}

4 | -------------------------------------------------------------------------------- /app/templates/security/email/confirmation_instructions.txt: -------------------------------------------------------------------------------- 1 | {{ _('Please confirm your email through the link below:') }} 2 | 3 | {{ confirmation_link }} 4 | -------------------------------------------------------------------------------- /app/templates/security/email/login_instructions.html: -------------------------------------------------------------------------------- 1 |

{{ _('Welcome %(email)s!', email=user.email) }}

2 | 3 |

{{ _('You can log into your account through the link below:') }}

4 | 5 |

{{ _('Login now') }}

6 | -------------------------------------------------------------------------------- /app/templates/security/email/login_instructions.txt: -------------------------------------------------------------------------------- 1 | {{ _('Welcome %(email)s!', email=user.email) }} 2 | 3 | {{ _('You can log into your account through the link below:') }} 4 | 5 | {{ login_link }} 6 | -------------------------------------------------------------------------------- /app/templates/security/email/reset_instructions.html: -------------------------------------------------------------------------------- 1 |

{{ _('Click here to reset your password') }}

2 | -------------------------------------------------------------------------------- /app/templates/security/email/reset_instructions.txt: -------------------------------------------------------------------------------- 1 | {{ _('Click the link below to reset your password:') }} 2 | 3 | {{ reset_link }} 4 | -------------------------------------------------------------------------------- /app/templates/security/email/reset_notice.html: -------------------------------------------------------------------------------- 1 |

{{ _('Your password has been reset') }}

2 | -------------------------------------------------------------------------------- /app/templates/security/email/reset_notice.txt: -------------------------------------------------------------------------------- 1 | {{ _('Your password has been reset') }} 2 | -------------------------------------------------------------------------------- /app/templates/security/email/welcome.html: -------------------------------------------------------------------------------- 1 |

{{ _('Welcome %(email)s!', email=user.email) }}

2 | 3 | {% if security.confirmable %} 4 |

{{ _('You can confirm your email through the link below:') }}

5 | 6 |

{{ _('Confirm my account') }}

7 | {% endif %} 8 | -------------------------------------------------------------------------------- /app/templates/security/email/welcome.txt: -------------------------------------------------------------------------------- 1 | {{ _('Welcome %(email)s!', email=user.email) }} 2 | 3 | {% if security.confirmable %} 4 | {{ _('You can confirm your email through the link below:') }} 5 | 6 | {{ confirmation_link }} 7 | {% endif %} 8 | -------------------------------------------------------------------------------- /app/templates/security/forgot_password.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 4 | {% include "security/_messages.html" %} 5 |

{{ _('Send password reset instructions') }}

6 |
7 | {{ forgot_password_form.hidden_tag() }} 8 | {{ render_field_with_errors(forgot_password_form.email, class_="form-control") }} 9 | {{ render_field(forgot_password_form.submit, class_="btn btn-primary") }} 10 |
11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /app/templates/security/login_user.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 4 | {% include "security/_messages.html" %} 5 |

{{ _('Login') }}

6 |
7 | {{ login_user_form.hidden_tag() }} 8 | {{ render_field_with_errors(login_user_form.email, class_="form-control") }} 9 | {{ render_field_with_errors(login_user_form.password, class_="form-control") }} 10 | {{ render_field_with_errors(login_user_form.remember, class_="") }} 11 | {{ render_field(login_user_form.next, class_="form-control") }} 12 | {{ render_field(login_user_form.submit, class_="btn btn-success") }} 13 |
14 | 15 | {% if security.recoverable %} 16 |

{{ _('Forgot password') }}

17 | {% endif %} 18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /app/templates/security/register_user.html: -------------------------------------------------------------------------------- 1 | {% extends "layout.html" %} 2 | {% block content %} 3 | 4 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 5 | {% include "security/_messages.html" %} 6 |

{{ _('Register') }}

7 |
8 | {{ register_user_form.hidden_tag() }} 9 | {{ render_field_with_errors(register_user_form.email, class_="form-control") }} 10 | {{ render_field_with_errors(register_user_form.password, class_="form-control") }} 11 | {% if register_user_form.password_confirm %} 12 | {{ render_field_with_errors(register_user_form.password_confirm, class_="form-control") }} 13 | {% endif %} 14 | {{ render_field(register_user_form.submit, class_="btn btn-success") }} 15 |
16 | 17 | 18 | {% endblock %} 19 | -------------------------------------------------------------------------------- /app/templates/security/reset_password.html: -------------------------------------------------------------------------------- 1 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 2 | {% include "security/_messages.html" %} 3 |

{{ _('Reset password') }}

4 |
5 | {{ reset_password_form.hidden_tag() }} 6 | {{ render_field_with_errors(reset_password_form.password) }} 7 | {{ render_field_with_errors(reset_password_form.password_confirm) }} 8 | {{ render_field(reset_password_form.submit) }} 9 |
10 | {% include "security/_menu.html" %} 11 | -------------------------------------------------------------------------------- /app/templates/security/send_confirmation.html: -------------------------------------------------------------------------------- 1 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 2 | {% include "security/_messages.html" %} 3 |

{{ _('Resend confirmation instructions') }}

4 |
5 | {{ send_confirmation_form.hidden_tag() }} 6 | {{ render_field_with_errors(send_confirmation_form.email) }} 7 | {{ render_field(send_confirmation_form.submit) }} 8 |
9 | {% include "security/_menu.html" %} 10 | -------------------------------------------------------------------------------- /app/templates/security/send_login.html: -------------------------------------------------------------------------------- 1 | {% from "security/_macros.html" import render_field_with_errors, render_field %} 2 | {% include "security/_messages.html" %} 3 |

{{ _('Login') }}

4 |
5 | {{ send_login_form.hidden_tag() }} 6 | {{ render_field_with_errors(send_login_form.email) }} 7 | {{ render_field(send_login_form.submit) }} 8 |
9 | {% include "security/_menu.html" %} 10 | -------------------------------------------------------------------------------- /app/translations/da_DK/LC_MESSAGES/flask_security.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/translations/da_DK/LC_MESSAGES/flask_security.mo -------------------------------------------------------------------------------- /app/translations/da_DK/LC_MESSAGES/flask_security.po: -------------------------------------------------------------------------------- 1 | # Danish (Denmark) translations for Flask-Security. 2 | # Copyright (C) 2017 ORGANIZATION 3 | # This file is distributed under the same license as the Flask-Security 4 | # project. 5 | # FIRST AUTHOR , 2017. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Flask-Security 2.1.0\n" 10 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 11 | "POT-Creation-Date: 2017-06-06 13:23+0200\n" 12 | "PO-Revision-Date: 2017-03-23 14:04+0100\n" 13 | "Last-Translator: Leonhard Printz \n" 14 | "Language: da_DK\n" 15 | "Language-Team: da_DK \n" 16 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=utf-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Generated-By: Babel 2.4.0\n" 21 | 22 | #: flask_security/core.py:99 23 | msgid "Login Required" 24 | msgstr "Login påkræveet" 25 | 26 | #: flask_security/core.py:100 27 | msgid "Welcome" 28 | msgstr "Velkommen" 29 | 30 | #: flask_security/core.py:101 31 | msgid "Please confirm your email" 32 | msgstr "Bekræft venligst din email" 33 | 34 | #: flask_security/core.py:102 35 | msgid "Login instructions" 36 | msgstr "Logininstruktioner" 37 | 38 | #: flask_security/core.py:103 39 | #: flask_security/templates/security/email/reset_notice.html:1 40 | msgid "Your password has been reset" 41 | msgstr "Din adgangskode er blevet nulstillet" 42 | 43 | #: flask_security/core.py:104 44 | msgid "Your password has been changed" 45 | msgstr "Din adgangskode er blevet ændret" 46 | 47 | #: flask_security/core.py:106 48 | msgid "Password reset instructions" 49 | msgstr "Instruktioner til nulstilling af adganskode" 50 | 51 | #: flask_security/core.py:132 52 | msgid "You do not have permission to view this resource." 53 | msgstr "Du har ikke adgang til denne resource." 54 | 55 | #: flask_security/core.py:134 56 | #, python-format 57 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 58 | msgstr "Mange tak. Bekræftelsesinstruktioner er blevet sendt til %(email)s." 59 | 60 | #: flask_security/core.py:138 61 | msgid "Thank you. Your email has been confirmed." 62 | msgstr "Mange Tak. Din email er blevet bekræftet." 63 | 64 | #: flask_security/core.py:140 65 | msgid "Your email has already been confirmed." 66 | msgstr "Din email er allerede blevet bekræftet." 67 | 68 | #: flask_security/core.py:142 69 | msgid "Invalid confirmation token." 70 | msgstr "Ugyldig bekræftigelsestoken." 71 | 72 | #: flask_security/core.py:144 73 | #, python-format 74 | msgid "%(email)s is already associated with an account." 75 | msgstr "%(email)s er allerede brugt af en anden konto." 76 | 77 | #: flask_security/core.py:146 78 | msgid "Password does not match" 79 | msgstr "Adgangskode passer ikke" 80 | 81 | #: flask_security/core.py:148 82 | msgid "Passwords do not match" 83 | msgstr "Adgangskoderne passer ikke" 84 | 85 | #: flask_security/core.py:150 86 | msgid "Redirections outside the domain are forbidden" 87 | msgstr "Omdirigering udenfor domænet er forbudt" 88 | 89 | #: flask_security/core.py:152 90 | #, python-format 91 | msgid "Instructions to reset your password have been sent to %(email)s." 92 | msgstr "" 93 | "Instruktioner til nulstilling af din adgangskode er blevet sendt til " 94 | "%(email)s." 95 | 96 | #: flask_security/core.py:155 97 | #, python-format 98 | msgid "" 99 | "You did not reset your password within %(within)s. New instructions have " 100 | "been sent to %(email)s." 101 | msgstr "" 102 | "Du har ikke nulstillet din adgangskode indenfor %(within)s. Nye " 103 | "instruktioner er sendt til %(email)s." 104 | 105 | #: flask_security/core.py:158 106 | msgid "Invalid reset password token." 107 | msgstr "Ugyldig nulstillingstoken." 108 | 109 | #: flask_security/core.py:160 110 | msgid "Email requires confirmation." 111 | msgstr "Email kræver bekræftigelse." 112 | 113 | #: flask_security/core.py:162 114 | #, python-format 115 | msgid "Confirmation instructions have been sent to %(email)s." 116 | msgstr "Bekræftigelsesinstruktioner er blevet sendt til %(email)s." 117 | 118 | #: flask_security/core.py:164 119 | #, python-format 120 | msgid "" 121 | "You did not confirm your email within %(within)s. New instructions to " 122 | "confirm your email have been sent to %(email)s." 123 | msgstr "" 124 | "Du har ikke bekræftet din email indenfor %(within)s. Nye instruktioner er" 125 | " blevet sendt til %(email)s." 126 | 127 | #: flask_security/core.py:168 128 | #, python-format 129 | msgid "" 130 | "You did not login within %(within)s. New instructions to login have been " 131 | "sent to %(email)s." 132 | msgstr "" 133 | "Du har ikke logget in indenfor %(within)s. Nye logininstruktioner er " 134 | "blevet sendt til %(email)s." 135 | 136 | #: flask_security/core.py:171 137 | #, python-format 138 | msgid "Instructions to login have been sent to %(email)s." 139 | msgstr "Logininstruktioner er blevet sendt til %(email)s." 140 | 141 | #: flask_security/core.py:173 142 | msgid "Invalid login token." 143 | msgstr "Ugyldig logintoken." 144 | 145 | #: flask_security/core.py:175 146 | msgid "Account is disabled." 147 | msgstr "Kontoen er deaktiveret." 148 | 149 | #: flask_security/core.py:177 150 | msgid "Email not provided" 151 | msgstr "Email ikke angivet" 152 | 153 | #: flask_security/core.py:179 154 | msgid "Invalid email address" 155 | msgstr "Ugyldig email adresse" 156 | 157 | #: flask_security/core.py:181 158 | msgid "Password not provided" 159 | msgstr "Adgangskode ikke angivet" 160 | 161 | #: flask_security/core.py:183 162 | msgid "No password is set for this user" 163 | msgstr "Denne bruger har ingen adganskode" 164 | 165 | #: flask_security/core.py:185 166 | msgid "Password must be at least 6 characters" 167 | msgstr "Adgangskoden skal indeholde mindst 6 tegn" 168 | 169 | #: flask_security/core.py:187 170 | msgid "Specified user does not exist" 171 | msgstr "Denne bruger findes ikke" 172 | 173 | #: flask_security/core.py:189 174 | msgid "Invalid password" 175 | msgstr "Ugyldig adgangskode" 176 | 177 | #: flask_security/core.py:191 178 | msgid "You have successfully logged in." 179 | msgstr "Du er hermed blevet logget ind." 180 | 181 | #: flask_security/core.py:193 182 | msgid "Forgot password?" 183 | msgstr "Glemt adgangskode?" 184 | 185 | #: flask_security/core.py:195 186 | msgid "" 187 | "You successfully reset your password and you have been logged in " 188 | "automatically." 189 | msgstr "" 190 | "Du har hermed nulstillet din adgangskode og er blevet automatisk logget " 191 | "ind." 192 | 193 | #: flask_security/core.py:198 194 | msgid "Your new password must be different than your previous password." 195 | msgstr "Din nye adgangskode skal være anderledes end din tidligere adgangskode." 196 | 197 | #: flask_security/core.py:201 198 | msgid "You successfully changed your password." 199 | msgstr "Du har hermed ændret din adgangskode." 200 | 201 | #: flask_security/core.py:203 202 | msgid "Please log in to access this page." 203 | msgstr "Log in for at få adgang til denne side." 204 | 205 | #: flask_security/core.py:205 206 | msgid "Please reauthenticate to access this page." 207 | msgstr "Bekræft identitet for at få adgang til denne side." 208 | 209 | #: flask_security/forms.py:30 210 | msgid "Email Address" 211 | msgstr "Email adresse" 212 | 213 | #: flask_security/forms.py:31 214 | msgid "Password" 215 | msgstr "Adgangskode" 216 | 217 | #: flask_security/forms.py:32 218 | msgid "Remember Me" 219 | msgstr "Husk" 220 | 221 | #: flask_security/forms.py:33 flask_security/templates/security/_menu.html:4 222 | #: flask_security/templates/security/login_user.html:3 223 | #: flask_security/templates/security/send_login.html:3 224 | msgid "Login" 225 | msgstr "Login" 226 | 227 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:6 228 | #: flask_security/templates/security/register_user.html:3 229 | msgid "Register" 230 | msgstr "Registrer" 231 | 232 | #: flask_security/forms.py:35 233 | msgid "Resend Confirmation Instructions" 234 | msgstr "Gensend bekræftelsesinstruktioner" 235 | 236 | #: flask_security/forms.py:36 237 | msgid "Recover Password" 238 | msgstr "Genopret adgangskode" 239 | 240 | #: flask_security/forms.py:37 241 | msgid "Reset Password" 242 | msgstr "Nulstil adgangskode" 243 | 244 | #: flask_security/forms.py:38 245 | msgid "Retype Password" 246 | msgstr "Gentast adgangskode" 247 | 248 | #: flask_security/forms.py:39 249 | msgid "New Password" 250 | msgstr "Ny adgangskode" 251 | 252 | #: flask_security/forms.py:40 253 | msgid "Change Password" 254 | msgstr "Ændre adgangskode" 255 | 256 | #: flask_security/forms.py:41 257 | msgid "Send Login Link" 258 | msgstr "Send login link" 259 | 260 | #: flask_security/templates/security/_menu.html:2 261 | msgid "Menu" 262 | msgstr "Menu" 263 | 264 | #: flask_security/templates/security/_menu.html:9 265 | msgid "Forgot password" 266 | msgstr "Glemt din adgangskode" 267 | 268 | #: flask_security/templates/security/_menu.html:12 269 | msgid "Confirm account" 270 | msgstr "Bekræft konto" 271 | 272 | #: flask_security/templates/security/change_password.html:3 273 | msgid "Change password" 274 | msgstr "Ændre adgangskode" 275 | 276 | #: flask_security/templates/security/forgot_password.html:3 277 | msgid "Send password reset instructions" 278 | msgstr "Send adgangskode nulstillingsinstruktioner" 279 | 280 | #: flask_security/templates/security/reset_password.html:3 281 | msgid "Reset password" 282 | msgstr "Nulstil adgangskode" 283 | 284 | #: flask_security/templates/security/send_confirmation.html:3 285 | msgid "Resend confirmation instructions" 286 | msgstr "Gensend bekræftelsesinstruktioner" 287 | 288 | #: flask_security/templates/security/email/change_notice.html:1 289 | msgid "Your password has been changed." 290 | msgstr "Din adgangskode er blevet ændret." 291 | 292 | #: flask_security/templates/security/email/change_notice.html:3 293 | msgid "If you did not change your password," 294 | msgstr "Hvis du ikke har ændret din adgangskode," 295 | 296 | #: flask_security/templates/security/email/change_notice.html:3 297 | msgid "click here to reset it" 298 | msgstr "klik her for at ændre den" 299 | 300 | #: flask_security/templates/security/email/confirmation_instructions.html:1 301 | msgid "Please confirm your email through the link below:" 302 | msgstr "Bekræft venligst din email gennem nedenstående link:" 303 | 304 | #: flask_security/templates/security/email/confirmation_instructions.html:3 305 | #: flask_security/templates/security/email/welcome.html:6 306 | msgid "Confirm my account" 307 | msgstr "Bekræft ny konto" 308 | 309 | #: flask_security/templates/security/email/login_instructions.html:1 310 | #: flask_security/templates/security/email/welcome.html:1 311 | #, python-format 312 | msgid "Welcome %(email)s!" 313 | msgstr "Velkommen %(email)s!" 314 | 315 | #: flask_security/templates/security/email/login_instructions.html:3 316 | msgid "You can log into your account through the link below:" 317 | msgstr "Du kan logge ind gennem nedenstående link:" 318 | 319 | #: flask_security/templates/security/email/login_instructions.html:5 320 | msgid "Login now" 321 | msgstr "Login" 322 | 323 | #: flask_security/templates/security/email/reset_instructions.html:1 324 | msgid "Click here to reset your password" 325 | msgstr "Klik her for at nulstille din adgangskode" 326 | 327 | #: flask_security/templates/security/email/welcome.html:4 328 | msgid "You can confirm your email through the link below:" 329 | msgstr "Bekræft venligst din email gennem nedenstående link:" 330 | 331 | -------------------------------------------------------------------------------- /app/translations/de_DE/LC_MESSAGES/flask_security.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/translations/de_DE/LC_MESSAGES/flask_security.mo -------------------------------------------------------------------------------- /app/translations/de_DE/LC_MESSAGES/flask_security.po: -------------------------------------------------------------------------------- 1 | # German translation for Flask-Security (Du/Sie distinction has been 2 | # avoided) 3 | # Copyright (C) 2017 ORGANIZATION 4 | # This file is distributed under the same license as the Flask-Security 5 | # project. 6 | # Ingo Kleiber , 2017. 7 | # 8 | msgid "" 9 | msgstr "" 10 | "Project-Id-Version: Flask-Security 2.0.1\n" 11 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 12 | "POT-Creation-Date: 2017-06-06 13:23+0200\n" 13 | "PO-Revision-Date: 2017-04-30 17:00+0200\n" 14 | "Last-Translator: Ingo Kleiber \n" 15 | "Language: de_DE\n" 16 | "Language-Team: de_DE \n" 17 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=utf-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Generated-By: Babel 2.4.0\n" 22 | 23 | #: flask_security/core.py:99 24 | msgid "Login Required" 25 | msgstr "Login erforderlich" 26 | 27 | #: flask_security/core.py:100 28 | msgid "Welcome" 29 | msgstr "Willkommen" 30 | 31 | #: flask_security/core.py:101 32 | msgid "Please confirm your email" 33 | msgstr "Bitte E-Mail Adresse bestätigen" 34 | 35 | #: flask_security/core.py:102 36 | msgid "Login instructions" 37 | msgstr "Anmeldeinstruktionen" 38 | 39 | #: flask_security/core.py:103 40 | #: flask_security/templates/security/email/reset_notice.html:1 41 | msgid "Your password has been reset" 42 | msgstr "Das Passwort wurde zurückgesetzt" 43 | 44 | #: flask_security/core.py:104 45 | msgid "Your password has been changed" 46 | msgstr "Das Passwort wurde geändert" 47 | 48 | #: flask_security/core.py:106 49 | msgid "Password reset instructions" 50 | msgstr "Anleitung zur Passwortwiederherstellung" 51 | 52 | #: flask_security/core.py:132 53 | msgid "You do not have permission to view this resource." 54 | msgstr "Keine Berechtigung um diese Ressource zu sehen." 55 | 56 | #: flask_security/core.py:134 57 | #, python-format 58 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 59 | msgstr "Vielen Dank. Bestätigungsinstruktionen wurden an %(email)s gesendet." 60 | 61 | #: flask_security/core.py:138 62 | msgid "Thank you. Your email has been confirmed." 63 | msgstr "Vielen Dank. Die E-Mail Adresse wurde bestätigt." 64 | 65 | #: flask_security/core.py:140 66 | msgid "Your email has already been confirmed." 67 | msgstr "Die E-Mail Adresse wurde bereits bestätigt." 68 | 69 | #: flask_security/core.py:142 70 | msgid "Invalid confirmation token." 71 | msgstr "Ungültiger Bestätigungscode." 72 | 73 | #: flask_security/core.py:144 74 | #, python-format 75 | msgid "%(email)s is already associated with an account." 76 | msgstr "%(email)s ist bereits mit einem Konto verknüpft." 77 | 78 | #: flask_security/core.py:146 79 | msgid "Password does not match" 80 | msgstr "Das Passwort stimmt nicht überein" 81 | 82 | #: flask_security/core.py:148 83 | msgid "Passwords do not match" 84 | msgstr "Die Passwörter stimmen nicht überein" 85 | 86 | #: flask_security/core.py:150 87 | msgid "Redirections outside the domain are forbidden" 88 | msgstr "Weiterleitungen außerhalb der Domain sind verboten" 89 | 90 | #: flask_security/core.py:152 91 | #, python-format 92 | msgid "Instructions to reset your password have been sent to %(email)s." 93 | msgstr "" 94 | "Instruktionen um das Passwort wiederherzustellen wurden an %(email)s " 95 | "gesendet." 96 | 97 | #: flask_security/core.py:155 98 | #, python-format 99 | msgid "" 100 | "You did not reset your password within %(within)s. New instructions have " 101 | "been sent to %(email)s." 102 | msgstr "" 103 | "Das Passwort wurde nicht innerhalb von %(within)s zurückgesetzt. Neue " 104 | "Instruktionen wurden an %(email)s gesendet." 105 | 106 | #: flask_security/core.py:158 107 | msgid "Invalid reset password token." 108 | msgstr "Ungültiger Passwortwiederherstellungscode." 109 | 110 | #: flask_security/core.py:160 111 | msgid "Email requires confirmation." 112 | msgstr "Die E-Mail Adresse muss bestätigt werden." 113 | 114 | #: flask_security/core.py:162 115 | #, python-format 116 | msgid "Confirmation instructions have been sent to %(email)s." 117 | msgstr "Bestätigungsinstruktionen wurden an %(email)s gesendet." 118 | 119 | #: flask_security/core.py:164 120 | #, python-format 121 | msgid "" 122 | "You did not confirm your email within %(within)s. New instructions to " 123 | "confirm your email have been sent to %(email)s." 124 | msgstr "" 125 | "Die E-Mail Adresse wurden nicht innerhalb von %(within)s bestätigt. Neue " 126 | "Instruktionen wurden an %(email)s gesendet." 127 | 128 | #: flask_security/core.py:168 129 | #, python-format 130 | msgid "" 131 | "You did not login within %(within)s. New instructions to login have been " 132 | "sent to %(email)s." 133 | msgstr "" 134 | "Die Anmeldung erfolgte nicht in %(within)s. Neue Instruktionen wurden an " 135 | "%(email)s gesendet." 136 | 137 | #: flask_security/core.py:171 138 | #, python-format 139 | msgid "Instructions to login have been sent to %(email)s." 140 | msgstr "Instruktionen zur Anmeldung wurden an %(email)s gesendet." 141 | 142 | #: flask_security/core.py:173 143 | msgid "Invalid login token." 144 | msgstr "Ungültiger Anmeldecode." 145 | 146 | #: flask_security/core.py:175 147 | msgid "Account is disabled." 148 | msgstr "Konto ist deaktiviert." 149 | 150 | #: flask_security/core.py:177 151 | msgid "Email not provided" 152 | msgstr "Keine E-Mail Adresse angegeben" 153 | 154 | #: flask_security/core.py:179 155 | msgid "Invalid email address" 156 | msgstr "Ungültige E-Mail Adresse" 157 | 158 | #: flask_security/core.py:181 159 | msgid "Password not provided" 160 | msgstr "Kein Passwort angegeben" 161 | 162 | #: flask_security/core.py:183 163 | msgid "No password is set for this user" 164 | msgstr "Für diesen Benutzer ist kein Passwort gesetzt" 165 | 166 | #: flask_security/core.py:185 167 | msgid "Password must be at least 6 characters" 168 | msgstr "Das Passwort muss mindestens 6 Zeichen lang sein" 169 | 170 | #: flask_security/core.py:187 171 | msgid "Specified user does not exist" 172 | msgstr "Spezifizierter Benutzer existiert nicht" 173 | 174 | #: flask_security/core.py:189 175 | msgid "Invalid password" 176 | msgstr "Ungültiges Passwort" 177 | 178 | #: flask_security/core.py:191 179 | msgid "You have successfully logged in." 180 | msgstr "Die Anmeldung war erfolgreich." 181 | 182 | #: flask_security/core.py:193 183 | msgid "Forgot password?" 184 | msgstr "Passwort vergessen?" 185 | 186 | #: flask_security/core.py:195 187 | msgid "" 188 | "You successfully reset your password and you have been logged in " 189 | "automatically." 190 | msgstr "" 191 | "Das Passwort wurde erfolgreich wiederhergestellt und der Login erfolgte " 192 | "automatisch." 193 | 194 | #: flask_security/core.py:198 195 | msgid "Your new password must be different than your previous password." 196 | msgstr "Das neue Passwort muss sich vom vorherigen unterscheiden." 197 | 198 | #: flask_security/core.py:201 199 | msgid "You successfully changed your password." 200 | msgstr "Das Passwort wurde erfolgreich geändert." 201 | 202 | #: flask_security/core.py:203 203 | msgid "Please log in to access this page." 204 | msgstr "Bitte Anmelden um diese Seite zu sehen." 205 | 206 | #: flask_security/core.py:205 207 | msgid "Please reauthenticate to access this page." 208 | msgstr "Bitte neu authentifizieren um auf diese Seite zuzugreifen." 209 | 210 | #: flask_security/forms.py:30 211 | msgid "Email Address" 212 | msgstr "E-Mail Adresse" 213 | 214 | #: flask_security/forms.py:31 215 | msgid "Password" 216 | msgstr "Passwort" 217 | 218 | #: flask_security/forms.py:32 219 | msgid "Remember Me" 220 | msgstr "Erinnern" 221 | 222 | #: flask_security/forms.py:33 flask_security/templates/security/_menu.html:4 223 | #: flask_security/templates/security/login_user.html:3 224 | #: flask_security/templates/security/send_login.html:3 225 | msgid "Login" 226 | msgstr "Anmelden" 227 | 228 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:6 229 | #: flask_security/templates/security/register_user.html:3 230 | msgid "Register" 231 | msgstr "Registrieren" 232 | 233 | #: flask_security/forms.py:35 234 | msgid "Resend Confirmation Instructions" 235 | msgstr "Bestätigungsinstruktionen neu senden" 236 | 237 | #: flask_security/forms.py:36 238 | msgid "Recover Password" 239 | msgstr "Passwort wiederherstellen" 240 | 241 | #: flask_security/forms.py:37 242 | msgid "Reset Password" 243 | msgstr "Passwort zurücksetzen" 244 | 245 | #: flask_security/forms.py:38 246 | msgid "Retype Password" 247 | msgstr "Passwort neu eingeben" 248 | 249 | #: flask_security/forms.py:39 250 | msgid "New Password" 251 | msgstr "Neues Passwort" 252 | 253 | #: flask_security/forms.py:40 254 | msgid "Change Password" 255 | msgstr "Passwort ändern" 256 | 257 | #: flask_security/forms.py:41 258 | msgid "Send Login Link" 259 | msgstr "Login-Link versenden" 260 | 261 | #: flask_security/templates/security/_menu.html:2 262 | msgid "Menu" 263 | msgstr "Menü" 264 | 265 | #: flask_security/templates/security/_menu.html:9 266 | msgid "Forgot password" 267 | msgstr "Passwort vergessen" 268 | 269 | #: flask_security/templates/security/_menu.html:12 270 | msgid "Confirm account" 271 | msgstr "Konto bestätigen" 272 | 273 | #: flask_security/templates/security/change_password.html:3 274 | msgid "Change password" 275 | msgstr "Passwort ändern" 276 | 277 | #: flask_security/templates/security/forgot_password.html:3 278 | msgid "Send password reset instructions" 279 | msgstr "Senden von Instruktionen zur Passwortzurücksetzung" 280 | 281 | #: flask_security/templates/security/reset_password.html:3 282 | msgid "Reset password" 283 | msgstr "Passwort zurücksetzen" 284 | 285 | #: flask_security/templates/security/send_confirmation.html:3 286 | msgid "Resend confirmation instructions" 287 | msgstr "Bestätigungsinstruktionen erneut versenden" 288 | 289 | #: flask_security/templates/security/email/change_notice.html:1 290 | msgid "Your password has been changed." 291 | msgstr "Das Passwort wurde geändert." 292 | 293 | #: flask_security/templates/security/email/change_notice.html:3 294 | msgid "If you did not change your password," 295 | msgstr "Falls das Passwort nicht geändert wurde" 296 | 297 | #: flask_security/templates/security/email/change_notice.html:3 298 | msgid "click here to reset it" 299 | msgstr "hier klicken um es zurückzusetzen" 300 | 301 | #: flask_security/templates/security/email/confirmation_instructions.html:1 302 | msgid "Please confirm your email through the link below:" 303 | msgstr "Bitte die E-Mail Adresse durch den Link unten bestätigen:" 304 | 305 | #: flask_security/templates/security/email/confirmation_instructions.html:3 306 | #: flask_security/templates/security/email/welcome.html:6 307 | msgid "Confirm my account" 308 | msgstr "Den Account bestätigen" 309 | 310 | #: flask_security/templates/security/email/login_instructions.html:1 311 | #: flask_security/templates/security/email/welcome.html:1 312 | #, python-format 313 | msgid "Welcome %(email)s!" 314 | msgstr "Willkommen %(email)s!" 315 | 316 | #: flask_security/templates/security/email/login_instructions.html:3 317 | msgid "You can log into your account through the link below:" 318 | msgstr "Die Anmeldung kann über den Link unten erfolgen:" 319 | 320 | #: flask_security/templates/security/email/login_instructions.html:5 321 | msgid "Login now" 322 | msgstr "Jetzt anmelden" 323 | 324 | #: flask_security/templates/security/email/reset_instructions.html:1 325 | msgid "Click here to reset your password" 326 | msgstr "Hier klicken um das Passwort zurückzusetzen" 327 | 328 | #: flask_security/templates/security/email/welcome.html:4 329 | msgid "You can confirm your email through the link below:" 330 | msgstr "Die E-Mail Adresse kann über den Link unten bestätigt werden" 331 | 332 | -------------------------------------------------------------------------------- /app/translations/flask_security.pot: -------------------------------------------------------------------------------- 1 | # Translations template for Flask-Security. 2 | # Copyright (C) 2017 CERN 3 | # This file is distributed under the same license as the Flask-Security 4 | # project. 5 | # FIRST AUTHOR , 2017. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Flask-Security 2.0.1\n" 10 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 11 | "POT-Creation-Date: 2017-06-06 13:23+0200\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=utf-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Generated-By: Babel 2.4.0\n" 19 | 20 | #: flask_security/core.py:99 21 | msgid "Login Required" 22 | msgstr "" 23 | 24 | #: flask_security/core.py:100 25 | msgid "Welcome" 26 | msgstr "" 27 | 28 | #: flask_security/core.py:101 29 | msgid "Please confirm your email" 30 | msgstr "" 31 | 32 | #: flask_security/core.py:102 33 | msgid "Login instructions" 34 | msgstr "" 35 | 36 | #: flask_security/core.py:103 37 | #: flask_security/templates/security/email/reset_notice.html:1 38 | msgid "Your password has been reset" 39 | msgstr "" 40 | 41 | #: flask_security/core.py:104 42 | msgid "Your password has been changed" 43 | msgstr "" 44 | 45 | #: flask_security/core.py:106 46 | msgid "Password reset instructions" 47 | msgstr "" 48 | 49 | #: flask_security/core.py:132 50 | msgid "You do not have permission to view this resource." 51 | msgstr "" 52 | 53 | #: flask_security/core.py:134 54 | #, python-format 55 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 56 | msgstr "" 57 | 58 | #: flask_security/core.py:138 59 | msgid "Thank you. Your email has been confirmed." 60 | msgstr "" 61 | 62 | #: flask_security/core.py:140 63 | msgid "Your email has already been confirmed." 64 | msgstr "" 65 | 66 | #: flask_security/core.py:142 67 | msgid "Invalid confirmation token." 68 | msgstr "" 69 | 70 | #: flask_security/core.py:144 71 | #, python-format 72 | msgid "%(email)s is already associated with an account." 73 | msgstr "" 74 | 75 | #: flask_security/core.py:146 76 | msgid "Password does not match" 77 | msgstr "" 78 | 79 | #: flask_security/core.py:148 80 | msgid "Passwords do not match" 81 | msgstr "" 82 | 83 | #: flask_security/core.py:150 84 | msgid "Redirections outside the domain are forbidden" 85 | msgstr "" 86 | 87 | #: flask_security/core.py:152 88 | #, python-format 89 | msgid "Instructions to reset your password have been sent to %(email)s." 90 | msgstr "" 91 | 92 | #: flask_security/core.py:155 93 | #, python-format 94 | msgid "" 95 | "You did not reset your password within %(within)s. New instructions have " 96 | "been sent to %(email)s." 97 | msgstr "" 98 | 99 | #: flask_security/core.py:158 100 | msgid "Invalid reset password token." 101 | msgstr "" 102 | 103 | #: flask_security/core.py:160 104 | msgid "Email requires confirmation." 105 | msgstr "" 106 | 107 | #: flask_security/core.py:162 108 | #, python-format 109 | msgid "Confirmation instructions have been sent to %(email)s." 110 | msgstr "" 111 | 112 | #: flask_security/core.py:164 113 | #, python-format 114 | msgid "" 115 | "You did not confirm your email within %(within)s. New instructions to " 116 | "confirm your email have been sent to %(email)s." 117 | msgstr "" 118 | 119 | #: flask_security/core.py:168 120 | #, python-format 121 | msgid "" 122 | "You did not login within %(within)s. New instructions to login have been " 123 | "sent to %(email)s." 124 | msgstr "" 125 | 126 | #: flask_security/core.py:171 127 | #, python-format 128 | msgid "Instructions to login have been sent to %(email)s." 129 | msgstr "" 130 | 131 | #: flask_security/core.py:173 132 | msgid "Invalid login token." 133 | msgstr "" 134 | 135 | #: flask_security/core.py:175 136 | msgid "Account is disabled." 137 | msgstr "" 138 | 139 | #: flask_security/core.py:177 140 | msgid "Email not provided" 141 | msgstr "" 142 | 143 | #: flask_security/core.py:179 144 | msgid "Invalid email address" 145 | msgstr "" 146 | 147 | #: flask_security/core.py:181 148 | msgid "Password not provided" 149 | msgstr "" 150 | 151 | #: flask_security/core.py:183 152 | msgid "No password is set for this user" 153 | msgstr "" 154 | 155 | #: flask_security/core.py:185 156 | msgid "Password must be at least 6 characters" 157 | msgstr "" 158 | 159 | #: flask_security/core.py:187 160 | msgid "Specified user does not exist" 161 | msgstr "" 162 | 163 | #: flask_security/core.py:189 164 | msgid "Invalid password" 165 | msgstr "" 166 | 167 | #: flask_security/core.py:191 168 | msgid "You have successfully logged in." 169 | msgstr "" 170 | 171 | #: flask_security/core.py:193 172 | msgid "Forgot password?" 173 | msgstr "" 174 | 175 | #: flask_security/core.py:195 176 | msgid "" 177 | "You successfully reset your password and you have been logged in " 178 | "automatically." 179 | msgstr "" 180 | 181 | #: flask_security/core.py:198 182 | msgid "Your new password must be different than your previous password." 183 | msgstr "" 184 | 185 | #: flask_security/core.py:201 186 | msgid "You successfully changed your password." 187 | msgstr "" 188 | 189 | #: flask_security/core.py:203 190 | msgid "Please log in to access this page." 191 | msgstr "" 192 | 193 | #: flask_security/core.py:205 194 | msgid "Please reauthenticate to access this page." 195 | msgstr "" 196 | 197 | #: flask_security/forms.py:30 198 | msgid "Email Address" 199 | msgstr "" 200 | 201 | #: flask_security/forms.py:31 202 | msgid "Password" 203 | msgstr "" 204 | 205 | #: flask_security/forms.py:32 206 | msgid "Remember Me" 207 | msgstr "" 208 | 209 | #: flask_security/forms.py:33 flask_security/templates/security/_menu.html:4 210 | #: flask_security/templates/security/login_user.html:3 211 | #: flask_security/templates/security/send_login.html:3 212 | msgid "Login" 213 | msgstr "" 214 | 215 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:6 216 | #: flask_security/templates/security/register_user.html:3 217 | msgid "Register" 218 | msgstr "" 219 | 220 | #: flask_security/forms.py:35 221 | msgid "Resend Confirmation Instructions" 222 | msgstr "" 223 | 224 | #: flask_security/forms.py:36 225 | msgid "Recover Password" 226 | msgstr "" 227 | 228 | #: flask_security/forms.py:37 229 | msgid "Reset Password" 230 | msgstr "" 231 | 232 | #: flask_security/forms.py:38 233 | msgid "Retype Password" 234 | msgstr "" 235 | 236 | #: flask_security/forms.py:39 237 | msgid "New Password" 238 | msgstr "" 239 | 240 | #: flask_security/forms.py:40 241 | msgid "Change Password" 242 | msgstr "" 243 | 244 | #: flask_security/forms.py:41 245 | msgid "Send Login Link" 246 | msgstr "" 247 | 248 | #: flask_security/templates/security/_menu.html:2 249 | msgid "Menu" 250 | msgstr "" 251 | 252 | #: flask_security/templates/security/_menu.html:9 253 | msgid "Forgot password" 254 | msgstr "" 255 | 256 | #: flask_security/templates/security/_menu.html:12 257 | msgid "Confirm account" 258 | msgstr "" 259 | 260 | #: flask_security/templates/security/change_password.html:3 261 | msgid "Change password" 262 | msgstr "" 263 | 264 | #: flask_security/templates/security/forgot_password.html:3 265 | msgid "Send password reset instructions" 266 | msgstr "" 267 | 268 | #: flask_security/templates/security/reset_password.html:3 269 | msgid "Reset password" 270 | msgstr "" 271 | 272 | #: flask_security/templates/security/send_confirmation.html:3 273 | msgid "Resend confirmation instructions" 274 | msgstr "" 275 | 276 | #: flask_security/templates/security/email/change_notice.html:1 277 | msgid "Your password has been changed." 278 | msgstr "" 279 | 280 | #: flask_security/templates/security/email/change_notice.html:3 281 | msgid "If you did not change your password," 282 | msgstr "" 283 | 284 | #: flask_security/templates/security/email/change_notice.html:3 285 | msgid "click here to reset it" 286 | msgstr "" 287 | 288 | #: flask_security/templates/security/email/confirmation_instructions.html:1 289 | msgid "Please confirm your email through the link below:" 290 | msgstr "" 291 | 292 | #: flask_security/templates/security/email/confirmation_instructions.html:3 293 | #: flask_security/templates/security/email/welcome.html:6 294 | msgid "Confirm my account" 295 | msgstr "" 296 | 297 | #: flask_security/templates/security/email/login_instructions.html:1 298 | #: flask_security/templates/security/email/welcome.html:1 299 | #, python-format 300 | msgid "Welcome %(email)s!" 301 | msgstr "" 302 | 303 | #: flask_security/templates/security/email/login_instructions.html:3 304 | msgid "You can log into your account through the link below:" 305 | msgstr "" 306 | 307 | #: flask_security/templates/security/email/login_instructions.html:5 308 | msgid "Login now" 309 | msgstr "" 310 | 311 | #: flask_security/templates/security/email/reset_instructions.html:1 312 | msgid "Click here to reset your password" 313 | msgstr "" 314 | 315 | #: flask_security/templates/security/email/welcome.html:4 316 | msgid "You can confirm your email through the link below:" 317 | msgstr "" 318 | 319 | -------------------------------------------------------------------------------- /app/translations/fr_FR/LC_MESSAGES/flask_security.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/translations/fr_FR/LC_MESSAGES/flask_security.mo -------------------------------------------------------------------------------- /app/translations/fr_FR/LC_MESSAGES/flask_security.po: -------------------------------------------------------------------------------- 1 | # French (France) translations for Flask-Security. 2 | # Copyright (C) 2017 CERN 3 | # This file is distributed under the same license as the Flask-Security 4 | # project. 5 | # Alexandre Bulté , 2017. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Flask-Security 2.0.1\n" 10 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 11 | "POT-Creation-Date: 2017-06-06 13:23+0200\n" 12 | "PO-Revision-Date: 2017-06-08 10:13+0200\n" 13 | "Last-Translator: Alexandre Bulté \n" 14 | "Language: fr_FR\n" 15 | "Language-Team: fr_FR \n" 16 | "Plural-Forms: nplurals=2; plural=(n > 1)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=utf-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Generated-By: Babel 2.4.0\n" 21 | 22 | #: flask_security/core.py:99 23 | msgid "Login Required" 24 | msgstr "Connexion requise" 25 | 26 | #: flask_security/core.py:100 27 | msgid "Welcome" 28 | msgstr "Bienvenue" 29 | 30 | #: flask_security/core.py:101 31 | msgid "Please confirm your email" 32 | msgstr "Merci de confirmer votre adresse email" 33 | 34 | #: flask_security/core.py:102 35 | msgid "Login instructions" 36 | msgstr "Instructions de connexion" 37 | 38 | #: flask_security/core.py:103 39 | #: flask_security/templates/security/email/reset_notice.html:1 40 | msgid "Your password has been reset" 41 | msgstr "Votre mot de passe a été réinitialisé" 42 | 43 | #: flask_security/core.py:104 44 | msgid "Your password has been changed" 45 | msgstr "Votre mot de passe a été changé" 46 | 47 | #: flask_security/core.py:106 48 | msgid "Password reset instructions" 49 | msgstr "Instructions de réinitialisation de votre mot de passe" 50 | 51 | #: flask_security/core.py:132 52 | msgid "You do not have permission to view this resource." 53 | msgstr "Vous n'avez pas l'autorisation d'accéder à cette ressource." 54 | 55 | #: flask_security/core.py:134 56 | #, python-format 57 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 58 | msgstr "Merci. Les instructions de confirmation ont été envoyées à %(email)s." 59 | 60 | #: flask_security/core.py:138 61 | msgid "Thank you. Your email has been confirmed." 62 | msgstr "Merci. Votre adresse email a été confirmée." 63 | 64 | #: flask_security/core.py:140 65 | msgid "Your email has already been confirmed." 66 | msgstr "Votre adresse email a déjà été confirmée." 67 | 68 | #: flask_security/core.py:142 69 | msgid "Invalid confirmation token." 70 | msgstr "Token de confirmation non valide." 71 | 72 | #: flask_security/core.py:144 73 | #, python-format 74 | msgid "%(email)s is already associated with an account." 75 | msgstr "L'adresse %(email)s est déjà utilisée." 76 | 77 | #: flask_security/core.py:146 78 | msgid "Password does not match" 79 | msgstr "Le mot de passe ne correspond pas" 80 | 81 | #: flask_security/core.py:148 82 | msgid "Passwords do not match" 83 | msgstr "Les mots de passe ne correspondent pas" 84 | 85 | #: flask_security/core.py:150 86 | msgid "Redirections outside the domain are forbidden" 87 | msgstr "Les redirections en dehors du domaine sont interdites" 88 | 89 | #: flask_security/core.py:152 90 | #, python-format 91 | msgid "Instructions to reset your password have been sent to %(email)s." 92 | msgstr "" 93 | "Les instructions de réinitialisation de votre mot de passe ont été " 94 | "envoyées à %(email)s." 95 | 96 | #: flask_security/core.py:155 97 | #, python-format 98 | msgid "" 99 | "You did not reset your password within %(within)s. New instructions have " 100 | "been sent to %(email)s." 101 | msgstr "" 102 | "Vous n'avez pas réinitialisé votre mot de passe dans l'intervalle requis (%(within)s)" 103 | "De nouvelles instructions ont été envoyées à %(email)s." 104 | 105 | #: flask_security/core.py:158 106 | msgid "Invalid reset password token." 107 | msgstr "Token de réinitialisation non valide." 108 | 109 | #: flask_security/core.py:160 110 | msgid "Email requires confirmation." 111 | msgstr "Une confirmation de l'adresse email est requise." 112 | 113 | #: flask_security/core.py:162 114 | #, python-format 115 | msgid "Confirmation instructions have been sent to %(email)s." 116 | msgstr "Les instructions de confirmation ont été envoyées à %(email)s." 117 | 118 | #: flask_security/core.py:164 119 | #, python-format 120 | msgid "" 121 | "You did not confirm your email within %(within)s. New instructions to " 122 | "confirm your email have been sent to %(email)s." 123 | msgstr "" 124 | "Vous n'avez pas confirmé votre adresse email dans l'intervalle requis (%(within)s)" 125 | "De nouvelles instructions ont été envoyées à %(email)s." 126 | 127 | #: flask_security/core.py:168 128 | #, python-format 129 | msgid "" 130 | "You did not login within %(within)s. New instructions to login have been " 131 | "sent to %(email)s." 132 | msgstr "" 133 | "Vous ne vous êtes pas connecté dans l'intervalle requis (%(within)s)" 134 | "De nouvelles instructions ont été envoyées à %(email)s." 135 | 136 | #: flask_security/core.py:171 137 | #, python-format 138 | msgid "Instructions to login have been sent to %(email)s." 139 | msgstr "Les instructions de connexion ont été envoyées à %(email)s." 140 | 141 | #: flask_security/core.py:173 142 | msgid "Invalid login token." 143 | msgstr "Token de connexion non valide." 144 | 145 | #: flask_security/core.py:175 146 | msgid "Account is disabled." 147 | msgstr "Le compte est désactivé." 148 | 149 | #: flask_security/core.py:177 150 | msgid "Email not provided" 151 | msgstr "Merci d'indiquer une adresse email" 152 | 153 | #: flask_security/core.py:179 154 | msgid "Invalid email address" 155 | msgstr "Adresse email non valide" 156 | 157 | #: flask_security/core.py:181 158 | msgid "Password not provided" 159 | msgstr "Merci d'indiquer un mot de passe" 160 | 161 | #: flask_security/core.py:183 162 | msgid "No password is set for this user" 163 | msgstr "Cet utilisateur n'a pas de mot de passe" 164 | 165 | #: flask_security/core.py:185 166 | msgid "Password must be at least 6 characters" 167 | msgstr "Le mot de passe doit comporter au moins 6 caractères" 168 | 169 | #: flask_security/core.py:187 170 | msgid "Specified user does not exist" 171 | msgstr "Cet utilisateur n'existe pas" 172 | 173 | #: flask_security/core.py:189 174 | msgid "Invalid password" 175 | msgstr "Mot de passe non valide" 176 | 177 | #: flask_security/core.py:191 178 | msgid "You have successfully logged in." 179 | msgstr "Vous êtes bien connecté." 180 | 181 | #: flask_security/core.py:193 182 | msgid "Forgot password?" 183 | msgstr "Mot de passe oublié ?" 184 | 185 | #: flask_security/core.py:195 186 | msgid "" 187 | "You successfully reset your password and you have been logged in " 188 | "automatically." 189 | msgstr "" 190 | "Vous avez bien réinitialisé votre mot de passe et avez été automatiquement" 191 | "connecté." 192 | 193 | #: flask_security/core.py:198 194 | msgid "Your new password must be different than your previous password." 195 | msgstr "Votre nouveau mot de passe doit être différent du précédent." 196 | 197 | #: flask_security/core.py:201 198 | msgid "You successfully changed your password." 199 | msgstr "Vous avez bien changé votre mot de passe." 200 | 201 | #: flask_security/core.py:203 202 | msgid "Please log in to access this page." 203 | msgstr "Merci de vous connecter pour accéder à cette page." 204 | 205 | #: flask_security/core.py:205 206 | msgid "Please reauthenticate to access this page." 207 | msgstr "Merci de vous reconnecter pour accéder à cette page." 208 | 209 | #: flask_security/forms.py:30 210 | msgid "Email Address" 211 | msgstr "Adresse email" 212 | 213 | #: flask_security/forms.py:31 214 | msgid "Password" 215 | msgstr "Mot de passe" 216 | 217 | #: flask_security/forms.py:32 218 | msgid "Remember Me" 219 | msgstr "Se souvenir de moi" 220 | 221 | #: flask_security/forms.py:33 flask_security/templates/security/_menu.html:4 222 | #: flask_security/templates/security/login_user.html:3 223 | #: flask_security/templates/security/send_login.html:3 224 | msgid "Login" 225 | msgstr "Connexion" 226 | 227 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:6 228 | #: flask_security/templates/security/register_user.html:3 229 | msgid "Register" 230 | msgstr "Inscription" 231 | 232 | #: flask_security/forms.py:35 233 | msgid "Resend Confirmation Instructions" 234 | msgstr "Renvoyer les instructions de confirmation" 235 | 236 | #: flask_security/forms.py:36 237 | msgid "Recover Password" 238 | msgstr "Récupérer le mot de passe" 239 | 240 | #: flask_security/forms.py:37 241 | msgid "Reset Password" 242 | msgstr "Réinitialiser le mot de passe" 243 | 244 | #: flask_security/forms.py:38 245 | msgid "Retype Password" 246 | msgstr "Confirmer le mot de passe" 247 | 248 | #: flask_security/forms.py:39 249 | msgid "New Password" 250 | msgstr "Nouveau mot de passe" 251 | 252 | #: flask_security/forms.py:40 253 | msgid "Change Password" 254 | msgstr "Changer le mot de passe" 255 | 256 | #: flask_security/forms.py:41 257 | msgid "Send Login Link" 258 | msgstr "Envoyer le lien de connexion" 259 | 260 | #: flask_security/templates/security/_menu.html:2 261 | msgid "Menu" 262 | msgstr "Menu" 263 | 264 | #: flask_security/templates/security/_menu.html:9 265 | msgid "Forgot password" 266 | msgstr "Mot de passe oublié" 267 | 268 | #: flask_security/templates/security/_menu.html:12 269 | msgid "Confirm account" 270 | msgstr "Confirmer le compte" 271 | 272 | #: flask_security/templates/security/change_password.html:3 273 | msgid "Change password" 274 | msgstr "Changer de mot de passe" 275 | 276 | #: flask_security/templates/security/forgot_password.html:3 277 | msgid "Send password reset instructions" 278 | msgstr "Envoyer les instructions de réinitialisation de mot de passe" 279 | 280 | #: flask_security/templates/security/reset_password.html:3 281 | msgid "Reset password" 282 | msgstr "Réinitialiser le mot de passe" 283 | 284 | #: flask_security/templates/security/send_confirmation.html:3 285 | msgid "Resend confirmation instructions" 286 | msgstr "Renvoyer les instructions de confirmation" 287 | 288 | #: flask_security/templates/security/email/change_notice.html:1 289 | msgid "Your password has been changed." 290 | msgstr "Votre mot de passe a été changé." 291 | 292 | #: flask_security/templates/security/email/change_notice.html:3 293 | msgid "If you did not change your password," 294 | msgstr "Si vous n'avez pas changé votre mot de passe," 295 | 296 | #: flask_security/templates/security/email/change_notice.html:3 297 | msgid "click here to reset it" 298 | msgstr "cliquez ici pour le réinitialiser" 299 | 300 | #: flask_security/templates/security/email/confirmation_instructions.html:1 301 | msgid "Please confirm your email through the link below:" 302 | msgstr "Merci de confirmer votre adresse email via le lien ci-dessous :" 303 | 304 | #: flask_security/templates/security/email/confirmation_instructions.html:3 305 | #: flask_security/templates/security/email/welcome.html:6 306 | msgid "Confirm my account" 307 | msgstr "Confirmer mon compte" 308 | 309 | #: flask_security/templates/security/email/login_instructions.html:1 310 | #: flask_security/templates/security/email/welcome.html:1 311 | #, python-format 312 | msgid "Welcome %(email)s!" 313 | msgstr "Bienvenue %(email)s !" 314 | 315 | #: flask_security/templates/security/email/login_instructions.html:3 316 | msgid "You can log into your account through the link below:" 317 | msgstr "Vous pouvez vous connecter via le lien ci-dessous :" 318 | 319 | #: flask_security/templates/security/email/login_instructions.html:5 320 | msgid "Login now" 321 | msgstr "Se connecter maintenant" 322 | 323 | #: flask_security/templates/security/email/reset_instructions.html:1 324 | msgid "Click here to reset your password" 325 | msgstr "Cliquez pour réinitialiser votre mot de passe" 326 | 327 | #: flask_security/templates/security/email/welcome.html:4 328 | msgid "You can confirm your email through the link below:" 329 | msgstr "Vous pouvez confirmer votre votre adresse email via le lien ci-dessous :" 330 | -------------------------------------------------------------------------------- /app/translations/nl_NL/LC_MESSAGES/messages.po: -------------------------------------------------------------------------------- 1 | # Dutch (Netherlands) translations for Flask-Security. 2 | # Copyright (C) 2017 CERN 3 | # This file is distributed under the same license as the Flask-Security 4 | # project. 5 | # FIRST AUTHOR , 2017. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Flask-Security 2.0.1\n" 10 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 11 | "POT-Creation-Date: 2017-04-03 08:59+0200\n" 12 | "PO-Revision-Date: 2017-05-01 17:52+0200\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language: nl_NL\n" 15 | "Language-Team: nl_NL \n" 16 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 17 | "MIME-Version: 1.0\n" 18 | "Content-Type: text/plain; charset=utf-8\n" 19 | "Content-Transfer-Encoding: 8bit\n" 20 | "Generated-By: Babel 2.2.0\n" 21 | 22 | #: flask_security/core.py:98 23 | msgid "Login Required" 24 | msgstr "Inloggen Verplicht" 25 | 26 | #: flask_security/core.py:99 27 | msgid "Welcome" 28 | msgstr "Welkom" 29 | 30 | #: flask_security/core.py:100 31 | msgid "Please confirm your email" 32 | msgstr "Gelieve uw emailadres te bevestigen" 33 | 34 | #: flask_security/core.py:101 35 | msgid "Login instructions" 36 | msgstr "Login instructies" 37 | 38 | #: flask_security/core.py:102 39 | #: flask_security/templates/security/email/reset_notice.html:1 40 | msgid "Your password has been reset" 41 | msgstr "Uw wachtwoord werd gereset" 42 | 43 | #: flask_security/core.py:103 44 | msgid "Your password has been changed" 45 | msgstr "Uw wachtwoord werd gewijzigd" 46 | 47 | #: flask_security/core.py:105 48 | msgid "Password reset instructions" 49 | msgstr "Wachtwoord reset instructies" 50 | 51 | #: flask_security/core.py:131 52 | msgid "You do not have permission to view this resource." 53 | msgstr "U Heeft niet de nodige rechten om deze pagina te zien." 54 | 55 | #: flask_security/core.py:133 56 | #, python-format 57 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 58 | msgstr "Bedankt. Instructies voor bevestiging zijn verzonden naar %(email)s." 59 | 60 | #: flask_security/core.py:137 61 | msgid "Thank you. Your email has been confirmed." 62 | msgstr "Bedankt. Uw e-mailadres werd bevestigd." 63 | 64 | #: flask_security/core.py:139 65 | msgid "Your email has already been confirmed." 66 | msgstr "Uw e-mailadres werd reeds bevestigd." 67 | 68 | #: flask_security/core.py:141 69 | msgid "Invalid confirmation token." 70 | msgstr "Ongeldig bevestigings token." 71 | 72 | #: flask_security/core.py:143 73 | #, python-format 74 | msgid "%(email)s is already associated with an account." 75 | msgstr "%(email)s is al gelinkt aan een ander account." 76 | 77 | #: flask_security/core.py:145 78 | msgid "Password does not match" 79 | msgstr "Wachtwoord komt niet overeen" 80 | 81 | #: flask_security/core.py:147 82 | msgid "Passwords do not match" 83 | msgstr "Wachtwoorden komen niet overeen" 84 | 85 | #: flask_security/core.py:149 86 | msgid "Redirections outside the domain are forbidden" 87 | msgstr "Redirects buiten het domein zijn niet toegelaten" 88 | 89 | #: flask_security/core.py:151 90 | #, python-format 91 | msgid "Instructions to reset your password have been sent to %(email)s." 92 | msgstr "Instructies om uw wachtwoord te resetten werden verzonden naar %(email)s." 93 | 94 | #: flask_security/core.py:154 95 | #, python-format 96 | msgid "" 97 | "You did not reset your password within %(within)s. New instructions have " 98 | "been sent to %(email)s." 99 | msgstr "" 100 | "U heeft uw wachtwoord niet gereset gedurende %(within)s. Nieuwe instructies werden " 101 | "verzonden naar %(email)s." 102 | 103 | #: flask_security/core.py:157 104 | msgid "Invalid reset password token." 105 | msgstr "Ongeldig wachtwoord reset token." 106 | 107 | #: flask_security/core.py:159 108 | msgid "Email requires confirmation." 109 | msgstr "E-mailadres moet bevestigd worden." 110 | 111 | #: flask_security/core.py:161 112 | #, python-format 113 | msgid "Confirmation instructions have been sent to %(email)s." 114 | msgstr "Instructies ter bevestiging van uw e-mailadres werden verzonden naar %(email)s." 115 | 116 | #: flask_security/core.py:163 117 | #, python-format 118 | msgid "" 119 | "You did not confirm your email within %(within)s. New instructions to " 120 | "confirm your email have been sent to %(email)s." 121 | msgstr "" 122 | "U heeft uw e-mailadres niet bevestigd in de voorziene %(within)s. Nieuwe " 123 | "instructies ter bevestiging van uw e-mailadres werden verzonden naar %(email)s." 124 | 125 | #: flask_security/core.py:167 126 | #, python-format 127 | msgid "" 128 | "You did not login within %(within)s. New instructions to login have been " 129 | "sent to %(email)s." 130 | msgstr "" 131 | "Je bent niet ingelogd geweest gedurende %(within)s. Nieuwe instructies " 132 | "om in te loggen werden verzonden naar%(email)s." 133 | 134 | #: flask_security/core.py:170 135 | #, python-format 136 | msgid "Instructions to login have been sent to %(email)s." 137 | msgstr "Instructies om in te loggen werden verzonden naar %(email)s." 138 | 139 | #: flask_security/core.py:172 140 | msgid "Invalid login token." 141 | msgstr "Ongeldige login." 142 | 143 | #: flask_security/core.py:174 144 | msgid "Account is disabled." 145 | msgstr "Account is geblokkeerd." 146 | 147 | #: flask_security/core.py:176 148 | msgid "Email not provided" 149 | msgstr "Email niet ingevuld" 150 | 151 | #: flask_security/core.py:178 152 | msgid "Invalid email address" 153 | msgstr "Ongeldig e-mailadres" 154 | 155 | #: flask_security/core.py:180 156 | msgid "Password not provided" 157 | msgstr "Wachtwoord niet ingevuld" 158 | 159 | #: flask_security/core.py:182 160 | msgid "No password is set for this user" 161 | msgstr "Er is geen wachtwoord gezet voor deze gebruiker" 162 | 163 | #: flask_security/core.py:184 164 | msgid "Password must be at least 6 characters" 165 | msgstr "Uw wachtwoord moet minstens 6 karakters bevatten" 166 | 167 | #: flask_security/core.py:186 168 | msgid "Specified user does not exist" 169 | msgstr "Deze gebruiker bestaat niet" 170 | 171 | #: flask_security/core.py:188 172 | msgid "Invalid password" 173 | msgstr "Ongeldig wachtwoord" 174 | 175 | #: flask_security/core.py:190 176 | msgid "You have successfully logged in." 177 | msgstr "U bent succesvol ingelogd." 178 | 179 | #: flask_security/core.py:192 180 | msgid "Forgot password?" 181 | msgstr "Wachtwoord vergeten?" 182 | 183 | #: flask_security/core.py:194 184 | msgid "" 185 | "You successfully reset your password and you have been logged in " 186 | "automatically." 187 | msgstr "" 188 | "U heeft uw wachtwoord succesvol gereset en bent nu automatisch" 189 | "ingelogd." 190 | 191 | 192 | #: flask_security/core.py:197 193 | msgid "Your new password must be different than your previous password." 194 | msgstr "Uw nieuw wachtwoord moet verschillend zijn van het voorgaande wachtwoord." 195 | 196 | #: flask_security/core.py:200 197 | msgid "You successfully changed your password." 198 | msgstr "Uw wachtwoord werd met succes gewijzigd." 199 | 200 | #: flask_security/core.py:202 201 | msgid "Please log in to access this page." 202 | msgstr "Gelieve in te loggen om deze pagina te zien." 203 | 204 | #: flask_security/core.py:204 205 | msgid "Please reauthenticate to access this page." 206 | msgstr "Gelieve opnieuw in te loggen om deze pagina te zien." 207 | 208 | #: flask_security/forms.py:31 209 | msgid "Email Address" 210 | msgstr "E-mailadres" 211 | 212 | #: flask_security/forms.py:32 213 | msgid "Password" 214 | msgstr "wachtwoord" 215 | 216 | #: flask_security/forms.py:33 217 | msgid "Remember Me" 218 | msgstr "Ingelogd blijven" 219 | 220 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:4 221 | #: flask_security/templates/security/login_user.html:3 222 | #: flask_security/templates/security/send_login.html:3 223 | msgid "Login" 224 | msgstr "Login" 225 | 226 | #: flask_security/forms.py:35 flask_security/templates/security/_menu.html:6 227 | #: flask_security/templates/security/register_user.html:3 228 | msgid "Register" 229 | msgstr "Registreer" 230 | 231 | #: flask_security/forms.py:36 232 | msgid "Resend Confirmation Instructions" 233 | msgstr "Verzend instructies om te bevestigen opnieuw" 234 | 235 | #: flask_security/forms.py:37 236 | msgid "Recover Password" 237 | msgstr "Herstel wachtwoord" 238 | 239 | #: flask_security/forms.py:38 240 | msgid "Reset Password" 241 | msgstr "reset wachtwoord" 242 | 243 | #: flask_security/forms.py:39 244 | msgid "Retype Password" 245 | msgstr "Hertyp wachtwoord" 246 | 247 | #: flask_security/forms.py:40 248 | msgid "New Password" 249 | msgstr "Nieuw wachtwoord" 250 | 251 | #: flask_security/forms.py:41 252 | msgid "Change Password" 253 | msgstr "Verander wachtwoord" 254 | 255 | #: flask_security/forms.py:42 256 | msgid "Send Login Link" 257 | msgstr "Verzend login link" 258 | 259 | #: flask_security/templates/security/_menu.html:2 260 | msgid "Menu" 261 | msgstr "Menu" 262 | 263 | #: flask_security/templates/security/_menu.html:9 264 | msgid "Forgot password" 265 | msgstr "Wachtwoord vergeten" 266 | 267 | #: flask_security/templates/security/_menu.html:12 268 | msgid "Confirm account" 269 | msgstr "Bevestig account" 270 | 271 | #: flask_security/templates/security/change_password.html:3 272 | msgid "Change password" 273 | msgstr "Verander wachtwoord" 274 | 275 | #: flask_security/templates/security/forgot_password.html:3 276 | msgid "Send password reset instructions" 277 | msgstr "Verzend wachtwoord reset instructies" 278 | 279 | #: flask_security/templates/security/reset_password.html:3 280 | msgid "Reset password" 281 | msgstr "Reset wachtwoord" 282 | 283 | #: flask_security/templates/security/send_confirmation.html:3 284 | msgid "Resend confirmation instructions" 285 | msgstr "Verzend bevestigings instructies opnieuw" 286 | 287 | #: flask_security/templates/security/email/change_notice.html:1 288 | msgid "Your password has been changed." 289 | msgstr "Uw wachtwoord werd gewijzigd." 290 | 291 | #: flask_security/templates/security/email/change_notice.html:3 292 | msgid "If you did not change your password," 293 | msgstr "Als u uw wachtwoord niet hebt aangepast," 294 | 295 | #: flask_security/templates/security/email/change_notice.html:3 296 | msgid "click here to reset it" 297 | msgstr "Klik hier om het te resetten" 298 | 299 | #: flask_security/templates/security/email/confirmation_instructions.html:1 300 | msgid "Please confirm your email through the link below:" 301 | msgstr "Gelieve uw e-mailadres te bevestigen via onderstaande link:" 302 | 303 | #: flask_security/templates/security/email/confirmation_instructions.html:3 304 | #: flask_security/templates/security/email/welcome.html:6 305 | msgid "Confirm my account" 306 | msgstr "Bevestig mijn account" 307 | 308 | #: flask_security/templates/security/email/login_instructions.html:1 309 | #: flask_security/templates/security/email/welcome.html:1 310 | #, python-format 311 | msgid "Welcome %(email)s!" 312 | msgstr "Welkom, %(email)s!" 313 | 314 | #: flask_security/templates/security/email/login_instructions.html:3 315 | msgid "You can log into your through the link below:" 316 | msgstr "U kan zich aanmelden via de onderstaande link:" 317 | 318 | #: flask_security/templates/security/email/login_instructions.html:5 319 | msgid "Login now" 320 | msgstr "Nu inloggen" 321 | 322 | #: flask_security/templates/security/email/reset_instructions.html:1 323 | msgid "Click here to reset your password" 324 | msgstr "Klik hier om uw wachtwoord te resetten" 325 | 326 | #: flask_security/templates/security/email/welcome.html:4 327 | msgid "You can confirm your email through the link below:" 328 | msgstr "U kan uw e-mailadres bevestigen via de onderstaande link:" 329 | 330 | -------------------------------------------------------------------------------- /app/translations/ru_RU/LC_MESSAGES/flask_security.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/translations/ru_RU/LC_MESSAGES/flask_security.mo -------------------------------------------------------------------------------- /app/translations/ru_RU/LC_MESSAGES/flask_security.po: -------------------------------------------------------------------------------- 1 | # Russian Translations for Flask-Security. 2 | # Copyright (C) 2017 CERN, leovp 3 | # This file is distributed under the same license as the Flask-Security 4 | # project. 5 | # FIRST AUTHOR , 2017. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: Flask-Security 2.0.1\n" 10 | "Report-Msgid-Bugs-To: info@inveniosoftware.org\n" 11 | "POT-Creation-Date: 2017-06-06 13:23+0200\n" 12 | "PO-Revision-Date: 2017-04-15 15:15+0300\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language: ru_RU\n" 15 | "Language-Team: Leonid R. \n" 16 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " 17 | "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" 18 | "MIME-Version: 1.0\n" 19 | "Content-Type: text/plain; charset=utf-8\n" 20 | "Content-Transfer-Encoding: 8bit\n" 21 | "Generated-By: Babel 2.4.0\n" 22 | 23 | #: flask_security/core.py:99 24 | msgid "Login Required" 25 | msgstr "Требуется авторизация" 26 | 27 | #: flask_security/core.py:100 28 | msgid "Welcome" 29 | msgstr "Добро пожаловать" 30 | 31 | #: flask_security/core.py:101 32 | msgid "Please confirm your email" 33 | msgstr "Пожалуйста, подтвердите свой почтовый адрес" 34 | 35 | #: flask_security/core.py:102 36 | msgid "Login instructions" 37 | msgstr "Инструкция по входу" 38 | 39 | #: flask_security/core.py:103 40 | #: flask_security/templates/security/email/reset_notice.html:1 41 | msgid "Your password has been reset" 42 | msgstr "Ваш пароль был сброшен" 43 | 44 | #: flask_security/core.py:104 45 | msgid "Your password has been changed" 46 | msgstr "Ваш пароль был изменён" 47 | 48 | #: flask_security/core.py:106 49 | msgid "Password reset instructions" 50 | msgstr "Инструкция по восстановлению пароля" 51 | 52 | #: flask_security/core.py:132 53 | msgid "You do not have permission to view this resource." 54 | msgstr "У вас нет прав доступа к этому ресурсу." 55 | 56 | #: flask_security/core.py:134 57 | #, python-format 58 | msgid "Thank you. Confirmation instructions have been sent to %(email)s." 59 | msgstr "Спасибо. Инструкция по подтверждению аккаунта отправлена на %(email)s." 60 | 61 | #: flask_security/core.py:138 62 | msgid "Thank you. Your email has been confirmed." 63 | msgstr "Спасибо. Ваш почтовый адрес был подтверждён." 64 | 65 | #: flask_security/core.py:140 66 | msgid "Your email has already been confirmed." 67 | msgstr "Ваш почтовый адрес уже подтверждён." 68 | 69 | #: flask_security/core.py:142 70 | msgid "Invalid confirmation token." 71 | msgstr "Неверный токен для подтверждения аккаунта." 72 | 73 | #: flask_security/core.py:144 74 | #, python-format 75 | msgid "%(email)s is already associated with an account." 76 | msgstr "%(email)s уже привязан к другому аккаунту." 77 | 78 | #: flask_security/core.py:146 79 | msgid "Password does not match" 80 | msgstr "Пароль не подходит" 81 | 82 | #: flask_security/core.py:148 83 | msgid "Passwords do not match" 84 | msgstr "Пароли не совпадают" 85 | 86 | #: flask_security/core.py:150 87 | msgid "Redirections outside the domain are forbidden" 88 | msgstr "Перенаправления вне текущего домена запрещены" 89 | 90 | #: flask_security/core.py:152 91 | #, python-format 92 | msgid "Instructions to reset your password have been sent to %(email)s." 93 | msgstr "Инструкция по восстановлению пароля отправлена на %(email)s." 94 | 95 | #: flask_security/core.py:155 96 | #, python-format 97 | msgid "" 98 | "You did not reset your password within %(within)s. New instructions have " 99 | "been sent to %(email)s." 100 | msgstr "" 101 | "Вы не восстановили пароль в течение %(within)s. Новая инструкция " 102 | "отправлена на %(email)s." 103 | 104 | #: flask_security/core.py:158 105 | msgid "Invalid reset password token." 106 | msgstr "Неверный токен для восстановления пароля." 107 | 108 | #: flask_security/core.py:160 109 | msgid "Email requires confirmation." 110 | msgstr "Почтовый адрес требует подтверждения." 111 | 112 | #: flask_security/core.py:162 113 | #, python-format 114 | msgid "Confirmation instructions have been sent to %(email)s." 115 | msgstr "Инструкция по подтверждению аккаунта отправлена на %(email)s." 116 | 117 | #: flask_security/core.py:164 118 | #, python-format 119 | msgid "" 120 | "You did not confirm your email within %(within)s. New instructions to " 121 | "confirm your email have been sent to %(email)s." 122 | msgstr "" 123 | "Вы не подтвердили свой почтовый адрес в течение %(within)s. Новая " 124 | "инструкция по подтверждению отправлена на %(email)s." 125 | 126 | #: flask_security/core.py:168 127 | #, python-format 128 | msgid "" 129 | "You did not login within %(within)s. New instructions to login have been " 130 | "sent to %(email)s." 131 | msgstr "" 132 | "Вы не вошли в течение %(within)s. Новая инструкция по входу отправлена на" 133 | " %(email)s." 134 | 135 | #: flask_security/core.py:171 136 | #, python-format 137 | msgid "Instructions to login have been sent to %(email)s." 138 | msgstr "Инструкция по входу отправлена на %(email)s." 139 | 140 | #: flask_security/core.py:173 141 | msgid "Invalid login token." 142 | msgstr "Неверный токен для входа." 143 | 144 | #: flask_security/core.py:175 145 | msgid "Account is disabled." 146 | msgstr "Аккаунт отключён." 147 | 148 | #: flask_security/core.py:177 149 | msgid "Email not provided" 150 | msgstr "Почтовый адрес не введён" 151 | 152 | #: flask_security/core.py:179 153 | msgid "Invalid email address" 154 | msgstr "Неверный почтовый адрес" 155 | 156 | #: flask_security/core.py:181 157 | msgid "Password not provided" 158 | msgstr "Пароль не введён" 159 | 160 | #: flask_security/core.py:183 161 | msgid "No password is set for this user" 162 | msgstr "У данного пользователя не установлен пароль" 163 | 164 | #: flask_security/core.py:185 165 | msgid "Password must be at least 6 characters" 166 | msgstr "Пароль должен содержать как минимум 6 символов" 167 | 168 | #: flask_security/core.py:187 169 | msgid "Specified user does not exist" 170 | msgstr "Данный пользователь не найден" 171 | 172 | #: flask_security/core.py:189 173 | msgid "Invalid password" 174 | msgstr "Неверный пароль" 175 | 176 | #: flask_security/core.py:191 177 | msgid "You have successfully logged in." 178 | msgstr "Вы вошли." 179 | 180 | #: flask_security/core.py:193 181 | msgid "Forgot password?" 182 | msgstr "Забыли пароль?" 183 | 184 | #: flask_security/core.py:195 185 | msgid "" 186 | "You successfully reset your password and you have been logged in " 187 | "automatically." 188 | msgstr "Ваш пароль был восстановлен и вы автоматически вошли." 189 | 190 | #: flask_security/core.py:198 191 | msgid "Your new password must be different than your previous password." 192 | msgstr "Ваш новый пароль должен отличаться от предыдущего." 193 | 194 | #: flask_security/core.py:201 195 | msgid "You successfully changed your password." 196 | msgstr "Вы удачно сменили пароль." 197 | 198 | #: flask_security/core.py:203 199 | msgid "Please log in to access this page." 200 | msgstr "Пожалуйста, войдите чтобы получить доступ к этой странице." 201 | 202 | #: flask_security/core.py:205 203 | msgid "Please reauthenticate to access this page." 204 | msgstr "Пожалуйста, войдите заново чтобы получить доступ к этой странице." 205 | 206 | #: flask_security/forms.py:30 207 | msgid "Email Address" 208 | msgstr "Почтовый адрес" 209 | 210 | #: flask_security/forms.py:31 211 | msgid "Password" 212 | msgstr "Пароль" 213 | 214 | #: flask_security/forms.py:32 215 | msgid "Remember Me" 216 | msgstr "Запомнить меня" 217 | 218 | #: flask_security/forms.py:33 flask_security/templates/security/_menu.html:4 219 | #: flask_security/templates/security/login_user.html:3 220 | #: flask_security/templates/security/send_login.html:3 221 | msgid "Login" 222 | msgstr "Войти" 223 | 224 | #: flask_security/forms.py:34 flask_security/templates/security/_menu.html:6 225 | #: flask_security/templates/security/register_user.html:3 226 | msgid "Register" 227 | msgstr "Зарегистрироваться" 228 | 229 | #: flask_security/forms.py:35 230 | msgid "Resend Confirmation Instructions" 231 | msgstr "Заново отправить инструкцию по подтверждению аккаунта" 232 | 233 | #: flask_security/forms.py:36 234 | msgid "Recover Password" 235 | msgstr "Восстановить пароль" 236 | 237 | #: flask_security/forms.py:37 238 | msgid "Reset Password" 239 | msgstr "Сбросить пароль" 240 | 241 | #: flask_security/forms.py:38 242 | msgid "Retype Password" 243 | msgstr "Подтверждение пароля" 244 | 245 | #: flask_security/forms.py:39 246 | msgid "New Password" 247 | msgstr "Новый пароль" 248 | 249 | #: flask_security/forms.py:40 250 | msgid "Change Password" 251 | msgstr "Сменить пароль" 252 | 253 | #: flask_security/forms.py:41 254 | msgid "Send Login Link" 255 | msgstr "Отправить ссылку для входа" 256 | 257 | #: flask_security/templates/security/_menu.html:2 258 | msgid "Menu" 259 | msgstr "Меню" 260 | 261 | #: flask_security/templates/security/_menu.html:9 262 | msgid "Forgot password" 263 | msgstr "Забыли пароль" 264 | 265 | #: flask_security/templates/security/_menu.html:12 266 | msgid "Confirm account" 267 | msgstr "Подтвердить аккаунт" 268 | 269 | #: flask_security/templates/security/change_password.html:3 270 | msgid "Change password" 271 | msgstr "Сменить пароль" 272 | 273 | #: flask_security/templates/security/forgot_password.html:3 274 | msgid "Send password reset instructions" 275 | msgstr "Отправить инструкцию по сбросу пароля" 276 | 277 | #: flask_security/templates/security/reset_password.html:3 278 | msgid "Reset password" 279 | msgstr "Сбросить пароль" 280 | 281 | #: flask_security/templates/security/send_confirmation.html:3 282 | msgid "Resend confirmation instructions" 283 | msgstr "Заново отправить инструкцию по подтверждению аккаунта" 284 | 285 | #: flask_security/templates/security/email/change_notice.html:1 286 | msgid "Your password has been changed." 287 | msgstr "Ваш пароль был изменён." 288 | 289 | #: flask_security/templates/security/email/change_notice.html:3 290 | msgid "If you did not change your password," 291 | msgstr "Если вы не меняли свой пароль," 292 | 293 | #: flask_security/templates/security/email/change_notice.html:3 294 | msgid "click here to reset it" 295 | msgstr "нажмите сюда чтобы сбросить его" 296 | 297 | #: flask_security/templates/security/email/confirmation_instructions.html:1 298 | msgid "Please confirm your email through the link below:" 299 | msgstr "Пожалуйста, подтвердите свой почтовый адрес перейдя по ссылке:" 300 | 301 | #: flask_security/templates/security/email/confirmation_instructions.html:3 302 | #: flask_security/templates/security/email/welcome.html:6 303 | msgid "Confirm my account" 304 | msgstr "Подтвердить аккаунт" 305 | 306 | #: flask_security/templates/security/email/login_instructions.html:1 307 | #: flask_security/templates/security/email/welcome.html:1 308 | #, python-format 309 | msgid "Welcome %(email)s!" 310 | msgstr "Добро пожаловать, %(email)s!" 311 | 312 | #: flask_security/templates/security/email/login_instructions.html:3 313 | msgid "You can log into your account through the link below:" 314 | msgstr "Вы можете войти по ссылке ниже:" 315 | 316 | #: flask_security/templates/security/email/login_instructions.html:5 317 | msgid "Login now" 318 | msgstr "Войти" 319 | 320 | #: flask_security/templates/security/email/reset_instructions.html:1 321 | msgid "Click here to reset your password" 322 | msgstr "Нажмите, чтобы сбросить свой пароль" 323 | 324 | #: flask_security/templates/security/email/welcome.html:4 325 | msgid "You can confirm your email through the link below:" 326 | msgstr "Вы можете подтвердить свой почтовый адрес перейдя по ссылке:" 327 | 328 | #: layout 329 | msgid "Profile" 330 | msgstr "Профиль" 331 | 332 | #: layout 333 | msgid "Logout" 334 | msgstr "Выход" 335 | 336 | #: layout 337 | msgid "Home Page" 338 | msgstr "Главная" 339 | 340 | -------------------------------------------------------------------------------- /app/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alexmod/flask-security-flask-admin-mongodb/0287e8afda63b60526e9c9f30d4c2e7308d4d184/app/views/__init__.py -------------------------------------------------------------------------------- /app/views/members_views.py: -------------------------------------------------------------------------------- 1 | from flask import Blueprint, render_template, request, redirect, url_for 2 | from flask_security import login_required, current_user 3 | from app import babel 4 | from flask import current_app as app 5 | import gettext 6 | 7 | members_blueprint = Blueprint('members', __name__, template_folder='templates') 8 | 9 | 10 | @babel.localeselector 11 | def get_locale(): 12 | translations = [str(translation) for translation in 13 | babel.list_translations()] 14 | return request.accept_languages.best_match(translations) 15 | 16 | 17 | def set_lang(lang): 18 | i18n_dir = app.config['BABEL_TRANSLATION_DIRECTORIES'] 19 | gettext.install('lang', i18n_dir) 20 | trans_file = i18n_dir + lang + '/LC_MESSAGES/flask_security' 21 | tr = gettext.translation(trans_file, 'locale', languages=[lang]) 22 | tr.install(True) 23 | app.jinja_env.install_gettext_translations(tr) 24 | 25 | 26 | @members_blueprint.before_app_first_request 27 | def init_my_blueprint(): 28 | if not app.user_datastore.get_user('user@example.com'): 29 | app.user_datastore.create_user(email='user@example.com', 30 | password='Password1') 31 | if not app.user_datastore.get_user('admin@example.com'): 32 | app.user_datastore.create_role(name="admin") 33 | app.user_datastore.create_user(email='admin@example.com', 34 | password='Password1', roles=['admin']) 35 | 36 | 37 | @members_blueprint.before_app_request 38 | def before_request(): 39 | lang = get_locale() 40 | lang = lang if lang else app.config['BABEL_DEFAULT_LOCALE'] 41 | set_lang(lang) 42 | 43 | if request.path.startswith('/admin'): 44 | if current_user.is_authenticated: 45 | if not current_user.has_role("admin"): 46 | return redirect(url_for('security.logout')) 47 | else: 48 | return redirect(url_for('security.login')) 49 | 50 | 51 | @members_blueprint.route('/members/') 52 | @login_required 53 | def member_page(): 54 | return render_template('members/profile.html') 55 | -------------------------------------------------------------------------------- /app/views/public_views.py: -------------------------------------------------------------------------------- 1 | from flask import Blueprint, render_template 2 | 3 | public_blueprint = Blueprint('public', __name__, template_folder='templates') 4 | 5 | 6 | @public_blueprint.route('/') 7 | def home_page(): 8 | return render_template('public/home_page.html') 9 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | alembic==1.6.5 2 | autopep8==1.5.7 3 | Babel==2.9.1 4 | bcrypt==3.2.0 5 | blinker==1.4 6 | cffi==1.14.5 7 | click==8.0.1 8 | dataclasses==0.8 9 | dnspython==2.1.0 10 | dominate==2.6.0 11 | email-validator==1.1.2 12 | Flask==2.3.2 13 | Flask-Admin==1.5.8 14 | Flask-BabelEx==0.9.4 15 | Flask-Bootstrap==3.3.7.1 16 | Flask-Login==0.5.0 17 | Flask-Mail==0.9.1 18 | Flask-Migrate==3.0.1 19 | flask-mongoengine==1.0.0 20 | Flask-Principal==0.4.0 21 | Flask-Script==2.0.6 22 | Flask-Security==3.0.0 23 | Flask-SQLAlchemy==2.5.1 24 | Flask-WTF==0.15.1 25 | greenlet==1.1.0 26 | idna==3.2 27 | importlib-metadata==4.5.0 28 | isort==5.8.0 29 | itsdangerous==2.0.1 30 | Jinja2==3.0.1 31 | Mako==1.2.2 32 | MarkupSafe==2.0.1 33 | mongoengine==0.23.1 34 | msgpack==1.0.2 35 | passlib==1.7.4 36 | pycodestyle==2.7.0 37 | pycparser==2.20 38 | pymongo==3.11.4 39 | python-dateutil==2.8.1 40 | python-editor==1.0.4 41 | pytz==2021.1 42 | six==1.16.0 43 | speaklater==1.3 44 | SQLAlchemy==1.4.18 45 | toml==0.10.2 46 | typing-extensions==3.10.0.0 47 | visitor==0.1.3 48 | Werkzeug==2.2.3 49 | WTForms==2.3.3 50 | zipp==3.4.1 51 | -------------------------------------------------------------------------------- /test/t.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import unittest 3 | import warnings 4 | 5 | from flask import url_for 6 | 7 | 8 | def warn(*args, **kwargs): 9 | pass 10 | 11 | 12 | warnings.warn = warn 13 | 14 | 15 | class AppTestCase(unittest.TestCase): 16 | def setUp(self): 17 | self.app = create_app(extra_config_settings={ 18 | 'TESTING': True, 19 | 'WTF_CSRF_ENABLED': False}) 20 | self.app_context = self.app.test_request_context() 21 | self.app_context.push() 22 | self.client = self.app.test_client() 23 | 24 | # --------------------------------------------------------------------- 25 | # Тесты публичной части сайта 26 | # --------------------------------------------------------------------- 27 | 28 | def test_home_page(self): # Тест главной страницы 29 | response = self.client.get(url_for('public.home_page'), 30 | content_type='html/text') 31 | self.assertEqual(response.status_code, 200) 32 | assert 'Войти' in response.data.decode('utf-8') 33 | 34 | # --------------------------------------------------------------------- 35 | # Тесты пользовательской части сайта 36 | # --------------------------------------------------------------------- 37 | 38 | def login(self, username, password): 39 | r = self.client.post(url_for('security.login'), data=dict( 40 | email=username, 41 | password=password 42 | ), follow_redirects=True) 43 | return r 44 | 45 | def logout(self): 46 | return self.client.get(url_for('security.logout'), 47 | follow_redirects=True) 48 | 49 | def test_login_logout(self): # Тесты входа, выхода, неверн.: емайл, пароля 50 | rv = self.login('user@example.com', 'Password1') 51 | assert 'Профиль' in rv.data.decode('utf-8') 52 | rv = self.logout() 53 | 54 | rv = self.login('user@example.com', 'wrong_password') 55 | assert 'Неверный пароль' in rv.data.decode('utf-8') 56 | rv = self.login('wrong@email.com', '123456') 57 | assert 'Данный пользователь не найден' in rv.data.decode('utf-8') 58 | 59 | 60 | if __name__ == '__main__': 61 | import sys 62 | sys.path.append("..") 63 | from app import create_app 64 | result = unittest.main() 65 | -------------------------------------------------------------------------------- /wsgi.py: -------------------------------------------------------------------------------- 1 | from app import create_app 2 | 3 | app = create_app() 4 | --------------------------------------------------------------------------------