From 90bb52de3c59e869e50c5d8c61f30f9aa5934cf9 Mon Sep 17 00:00:00 2001 From: Sylvain LE GAL Date: Sat, 26 Sep 2015 02:57:00 +0200 Subject: [PATCH 1/7] rename module; --- auth_brute_force/README.rst | 114 +++++++++++++ auth_brute_force/__init__.py | 3 + auth_brute_force/__openerp__.py | 42 +++++ auth_brute_force/controllers/__init__.py | 2 + auth_brute_force/controllers/controllers.py | 104 ++++++++++++ auth_brute_force/data/ir_config_parameter.xml | 29 ++++ auth_brute_force/i18n/auth_brute_force.pot | 150 ++++++++++++++++++ auth_brute_force/i18n/fr.po | 120 ++++++++++++++ auth_brute_force/models/__init__.py | 3 + .../models/res_authentication_attempt.py | 58 +++++++ auth_brute_force/models/res_banned_remote.py | 71 +++++++++ auth_brute_force/security/ir_model_access.yml | 28 ++++ auth_brute_force/static/description/icon.png | Bin 0 -> 9455 bytes .../description/screenshot_attempts_list.png | Bin 0 -> 29462 bytes .../description/screenshot_custom_ban.png | Bin 0 -> 31984 bytes auth_brute_force/views/action.xml | 39 +++++ auth_brute_force/views/menu.xml | 32 ++++ auth_brute_force/views/view.xml | 98 ++++++++++++ 18 files changed, 893 insertions(+) create mode 100644 auth_brute_force/README.rst create mode 100644 auth_brute_force/__init__.py create mode 100644 auth_brute_force/__openerp__.py create mode 100644 auth_brute_force/controllers/__init__.py create mode 100644 auth_brute_force/controllers/controllers.py create mode 100644 auth_brute_force/data/ir_config_parameter.xml create mode 100644 auth_brute_force/i18n/auth_brute_force.pot create mode 100644 auth_brute_force/i18n/fr.po create mode 100644 auth_brute_force/models/__init__.py create mode 100644 auth_brute_force/models/res_authentication_attempt.py create mode 100644 auth_brute_force/models/res_banned_remote.py create mode 100644 auth_brute_force/security/ir_model_access.yml create mode 100644 auth_brute_force/static/description/icon.png create mode 100644 auth_brute_force/static/description/screenshot_attempts_list.png create mode 100644 auth_brute_force/static/description/screenshot_custom_ban.png create mode 100644 auth_brute_force/views/action.xml create mode 100644 auth_brute_force/views/menu.xml create mode 100644 auth_brute_force/views/view.xml diff --git a/auth_brute_force/README.rst b/auth_brute_force/README.rst new file mode 100644 index 000000000..60b0a73aa --- /dev/null +++ b/auth_brute_force/README.rst @@ -0,0 +1,114 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :alt: License + +=============================================================== +Tracks Authentication Attempts and Prevents Brute-force Attacks +=============================================================== + +This module registers each request done by users trying to authenticate into +Odoo. If the authentication fails, a counter is increased for the given remote +IP. After a defined number of attempts, Odoo will ban the remote IP and +ignore new requests. +This module applies security through obscurity +(https://en.wikipedia.org/wiki/Security_through_obscurity), +When a user is banned, the request is now considered as an attack. So, the UI +will **not** indicate to the user that his IP is banned and the regular message +'Wrong login/password' is displayed. + +This module realizes a call to a web API (http://ip-api.com) to try to have +extra information about remote IP. + +Known issue / Roadmap +--------------------- +The ID used to identify a remote request is the IP provided in the request +(key 'REMOTE_ADDR'). +Depending of server and / or user network configuration, the idenfication +of the user can be wrong, and mainly in the following cases: + +* if the Odoo server is behind an Apache / NGinx proxy without redirection, + all the request will be have the value '127.0.0.1' for the REMOTE_ADDR key; +* If some users are behind the same Internet Service Provider, if a user is + banned, all the other users will be banned too; + +Configuration +------------- + +Once installed, you can change the ir.config_parameter value for the key +'auth_brute_force.max_attempt_qty' (10 by default) that define the max number +of attempts allowed before the user was banned. + +Usage +----- + +Admin user have the possibility to unblock a banned IP. + +Logging +------- + +This module generates some WARNING logs, in the three following cases: + +* Authentication failed from remote '127.0.0.1'. Login tried : 'admin'. + Attempt 1 / 10. + +* Authentication failed from remote '127.0.0.1'. The remote has been banned. + Login tried : 'admin'. + +* Authentication tried from remote '127.0.0.1'. The request has been ignored + because the remote has been banned after 10 attempts without success. Login + tried : 'admin'. + +Screenshot +---------- + +**List of Attempts** + +.. image:: /auth_brute_force/static/description/screenshot_attempts_list.png + +**Detail of a banned IP** + +.. image:: /auth_brute_force/static/description/screenshot_custom_ban.png + + +Usage +===== + +* go to ... + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/149/8.0 + +For further information, please visit: + +* https://www.odoo.com/forum/help-1 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed feedback +`here `_. + +Credits +======= + +Contributors +------------ + +* Sylvain LE GAL (https://twitter.com/legalsylvain) + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org. diff --git a/auth_brute_force/__init__.py b/auth_brute_force/__init__.py new file mode 100644 index 000000000..b8166bd36 --- /dev/null +++ b/auth_brute_force/__init__.py @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- +from . import models +from . import controllers diff --git a/auth_brute_force/__openerp__.py b/auth_brute_force/__openerp__.py new file mode 100644 index 000000000..b05790164 --- /dev/null +++ b/auth_brute_force/__openerp__.py @@ -0,0 +1,42 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Tracks Authentication Attempts and Prevents Brute-force Attacks module +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Authentification - Brute-force Attack', + 'version': '8.0.1.0.0', + 'category': 'base', + 'summary': "Tracks Authentication Attempts and Prevents Brute-force" + " Attacks module", + 'author': "GRAP,Odoo Community Association (OCA)", + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'data': [ + 'security/ir_model_access.yml', + 'data/ir_config_parameter.xml', + 'views/view.xml', + 'views/action.xml', + 'views/menu.xml', + ], +} diff --git a/auth_brute_force/controllers/__init__.py b/auth_brute_force/controllers/__init__.py new file mode 100644 index 000000000..153a9e31e --- /dev/null +++ b/auth_brute_force/controllers/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import controllers diff --git a/auth_brute_force/controllers/controllers.py b/auth_brute_force/controllers/controllers.py new file mode 100644 index 000000000..f752eee95 --- /dev/null +++ b/auth_brute_force/controllers/controllers.py @@ -0,0 +1,104 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Tracks Authentication Attempts and Prevents Brute-force Attacks module +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import logging + +from openerp import fields, http, registry, SUPERUSER_ID +from openerp.http import request +from openerp.addons.web.controllers.main import Home, ensure_db + +_logger = logging.getLogger(__name__) + + +class LoginController(Home): + @http.route() + def web_login(self, redirect=None, **kw): + if request.httprequest.method == 'POST': + ensure_db() + remote = request.httprequest.remote_addr + # Get registry and cursor + config_obj = registry(request.session.db)['ir.config_parameter'] + attempt_obj = registry( + request.session.db)['res.authentication.attempt'] + banned_remote_obj = registry( + request.session.db)['res.banned.remote'] + cursor = attempt_obj.pool.cursor() + + # Get Settings + max_attempts_qty = int(config_obj.search_read( + cursor, SUPERUSER_ID, + [('key', '=', 'auth_brute_force.max_attempt_qty')], + ['value'])[0]['value']) + + # Test if remote user is banned + banned = banned_remote_obj.search(cursor, SUPERUSER_ID, [ + ('remote', '=', remote)]) + if banned: + _logger.warning( + "Authentication tried from remote '%s'. The request has" + " been ignored because the remote has been banned after" + " %d attempts without success. Login tried : '%s'." % ( + remote, max_attempts_qty, request.params['login'])) + request.params['password'] = '' + + else: + # Try to authenticate + result = request.session.authenticate( + request.session.db, request.params['login'], + request.params['password']) + + # Log attempt + cursor.commit() + attempt_obj.create(cursor, SUPERUSER_ID, { + 'attempt_date': fields.Datetime.now(), + 'login': request.params['login'], + 'remote': remote, + 'result': banned and 'banned' or ( + result and 'successfull' or 'failed'), + }) + cursor.commit() + if not banned and not result: + # Get last bad attempts quantity + attempts_qty = len(attempt_obj.search_last_failed( + cursor, SUPERUSER_ID, remote)) + + if max_attempts_qty <= attempts_qty: + # We ban the remote + _logger.warning( + "Authentication failed from remote '%s'. " + "The remote has been banned. Login tried : '%s'." % ( + remote, request.params['login'])) + banned_remote_obj.create(cursor, SUPERUSER_ID, { + 'remote': remote, + 'ban_date': fields.Datetime.now(), + }) + cursor.commit() + + else: + _logger.warning( + "Authentication failed from remote '%s'." + " Login tried : '%s'. Attempt %d / %d." % ( + remote, request.params['login'], attempts_qty, + max_attempts_qty)) + cursor.close() + + return super(LoginController, self).web_login(redirect=redirect, **kw) diff --git a/auth_brute_force/data/ir_config_parameter.xml b/auth_brute_force/data/ir_config_parameter.xml new file mode 100644 index 000000000..0eab93cd2 --- /dev/null +++ b/auth_brute_force/data/ir_config_parameter.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + auth_brute_force.max_attempt_qty + 10 + + + + diff --git a/auth_brute_force/i18n/auth_brute_force.pot b/auth_brute_force/i18n/auth_brute_force.pot new file mode 100644 index 000000000..52f9bf6f4 --- /dev/null +++ b/auth_brute_force/i18n/auth_brute_force.pot @@ -0,0 +1,150 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-26 00:39+0000\n" +"PO-Revision-Date: 2015-09-26 00:39+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_banned_remote.py:75 +#, python-format +msgid "%s %s - %s %s (ISP: %s)" +msgstr "" + +#. module: auth_brute_force +#: field:res.banned.remote,active:0 +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,attempt_date:0 +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,result:0 +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: field:res.banned.remote,ban_date:0 +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:34 +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,create_uid:0 +#: field:res.banned.remote,create_uid:0 +msgid "Created by" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,create_date:0 +#: field:res.banned.remote,create_date:0 +msgid "Created on" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:33 +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,id:0 +#: field:res.banned.remote,id:0 +msgid "ID" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,write_uid:0 +#: field:res.banned.remote,write_uid:0 +msgid "Last Updated by" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,write_date:0 +#: field:res.banned.remote,write_date:0 +msgid "Last Updated on" +msgstr "" + +#. module: auth_brute_force +#: field:res.banned.remote,name:0 +msgid "Name" +msgstr "" + +#. module: auth_brute_force +#: field:res.banned.remote,description:0 +msgid "Remote Description" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,remote:0 +#: field:res.banned.remote,remote:0 +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:32 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: field:res.authentication.attempt,login:0 +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: help:res.banned.remote,active:0 +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_banned_remote.py:77 +#, python-format +msgid "Unidentified Call from %s" +msgstr "" + +#. module: auth_brute_force +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + diff --git a/auth_brute_force/i18n/fr.po b/auth_brute_force/i18n/fr.po new file mode 100644 index 000000000..7e28872e4 --- /dev/null +++ b/auth_brute_force/i18n/fr.po @@ -0,0 +1,120 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-26 00:34+0000\n" +"PO-Revision-Date: 2015-09-26 00:34+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_banned_remote.py:75 +#, python-format +msgid "%s %s - %s %s (ISP: %s)" +msgstr "%s %s - %s %s (FAI : %s)" + +#. module: auth_brute_force +#: field:res.banned.remote,active:0 +msgid "Active" +msgstr "Active" + +#. module: auth_brute_force +#: field:res.authentication.attempt,attempt_date:0 +msgid "Attempt Date" +msgstr "Date de la tentative" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Tentative d'authentification" + +#. module: auth_brute_force +#: field:res.authentication.attempt,result:0 +msgid "Authentication Result" +msgstr "Résultat de l'authentification" + +#. module: auth_brute_force +#: field:res.banned.remote,ban_date:0 +msgid "Ban Date" +msgstr "Ban Date" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:34 +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Banni" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Clients distants bannis" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:33 +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Echoué" + +#. module: auth_brute_force +#: field:res.banned.remote,name:0 +msgid "Name" +msgstr "Nom" + +#. module: auth_brute_force +#: field:res.banned.remote,description:0 +msgid "Description" +msgstr "Description" + +#. module: auth_brute_force +#: field:res.authentication.attempt,remote:0 +#: field:res.banned.remote,remote:0 +msgid "Remote ID" +msgstr "ID du client Distant" + +#. module: auth_brute_force +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Réussie" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:32 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Réussie" + +#. module: auth_brute_force +#: field:res.authentication.attempt,login:0 +msgid "Tried Login" +msgstr "Idenfiant essayé" + +#. module: auth_brute_force +#: help:res.banned.remote,active:0 +msgid "Uncheck this box to unban the remote" +msgstr "Décochez cette case afin d'annuler l'exclusion du client distant" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_banned_remote.py:77 +#, python-format +msgid "Unidentified Call from %s" +msgstr "Appel non identifié depuis %s" + +#. module: auth_brute_force +#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Sans succès" + diff --git a/auth_brute_force/models/__init__.py b/auth_brute_force/models/__init__.py new file mode 100644 index 000000000..85cc3145c --- /dev/null +++ b/auth_brute_force/models/__init__.py @@ -0,0 +1,3 @@ +# -*- encoding: utf-8 -*- +from . import res_banned_remote +from . import res_authentication_attempt diff --git a/auth_brute_force/models/res_authentication_attempt.py b/auth_brute_force/models/res_authentication_attempt.py new file mode 100644 index 000000000..84e735bd3 --- /dev/null +++ b/auth_brute_force/models/res_authentication_attempt.py @@ -0,0 +1,58 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Tracks Authentication Attempts and Prevents Brute-force Attacks module +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import models, fields, api +from openerp.tools.translate import _ + + +class ResAuthenticationAttempt(models.Model): + _name = 'res.authentication.attempt' + _order = 'attempt_date desc' + + _ATTEMPT_RESULT = [ + ('successfull', _('Successfull')), + ('failed', _('Failed')), + ('banned', _('Banned')), + ] + + # Column Section + attempt_date = fields.Datetime(string='Attempt Date') + + login = fields.Char(string='Tried Login') + + remote = fields.Char(string='Remote ID') + + result = fields.Selection( + selection=_ATTEMPT_RESULT, string='Authentication Result') + + # Custom Section + @api.model + def search_last_failed(self, remote): + last_ok = self.search( + [('result', '=', 'successfull'), ('remote', '=', remote)], + order='attempt_date desc', limit=1) + if last_ok: + return self.search([ + ('remote', '=', remote), + ('attempt_date', '>', last_ok.attempt_date)]) + else: + return self.search([('remote', '=', remote)]) diff --git a/auth_brute_force/models/res_banned_remote.py b/auth_brute_force/models/res_banned_remote.py new file mode 100644 index 000000000..661dfc8a5 --- /dev/null +++ b/auth_brute_force/models/res_banned_remote.py @@ -0,0 +1,71 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Tracks Authentication Attempts and Prevents Brute-force Attacks module +# Copyright (C) 2015-Today GRAP (http://www.grap.coop) +# @author Sylvain LE GAL (https://twitter.com/legalsylvain) +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import urllib +import json + +from openerp import models, fields, api + + +class ResBannedRemote(models.Model): + _name = 'res.banned.remote' + _rec_name = 'remote' + + _GEOLOCALISATION_URL = "http://ip-api.com/json/{}" + + # Default Section + def _default_ban_date(self): + return fields.Datetime.now() + + # Column Section + description = fields.Text( + string='Description', compute='_compute_description', store=True) + + ban_date = fields.Datetime( + string='Ban Date', required=True, default=_default_ban_date) + + remote = fields.Char(string='Remote ID', required=True) + + active = fields.Boolean( + string='Active', help="Uncheck this box to unban the remote", + default=True) + + attempt_ids = fields.Many2many( + comodel_name='res.authentication.attempt', string='Attempts', + compute='_compute_attempt_ids') + + # Compute Section + @api.multi + @api.depends('remote') + def _compute_description(self): + for item in self: + url = self._GEOLOCALISATION_URL.format(item.remote) + res = json.loads(urllib.urlopen(url).read()) + item.description = '' + for k, v in res.iteritems(): + item.description += '%s : %s\n' % (k, v) + + @api.multi + def _compute_attempt_ids(self): + for item in self: + attempt_obj = self.env['res.authentication.attempt'] + item.attempt_ids = attempt_obj.search_last_failed(item.remote).ids diff --git a/auth_brute_force/security/ir_model_access.yml b/auth_brute_force/security/ir_model_access.yml new file mode 100644 index 000000000..57919b774 --- /dev/null +++ b/auth_brute_force/security/ir_model_access.yml @@ -0,0 +1,28 @@ +# -*- encoding: utf-8 -*- +- !record {model: ir.model.access, id: access_res_authentication_attempt_all}: + model_id: model_res_authentication_attempt + name: Authentication Attempt All Users + perm_read: true + +- !record {model: ir.model.access, id: access_res_banned_remote_all}: + model_id: model_res_banned_remote + name: Banned Remote All Users + perm_read: true + +- !record {model: ir.model.access, id: access_res_authentication_attempt_manager}: + group_id: base.group_system + model_id: model_res_authentication_attempt + name: Authentication Attempt Manager + perm_create: true + perm_read: true + perm_write: true + perm_unlink: true + +- !record {model: ir.model.access, id: access_res_banned_remote_manager}: + group_id: base.group_system + model_id: model_res_banned_remote + name: Banned Remote Manager + perm_create: true + perm_read: true + perm_write: true + perm_unlink: true diff --git a/auth_brute_force/static/description/icon.png b/auth_brute_force/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/auth_brute_force/static/description/screenshot_attempts_list.png b/auth_brute_force/static/description/screenshot_attempts_list.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee6f940fdaca0d7078346c5be66474fcff28269 GIT binary patch literal 29462 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 literal 0 HcmV?d00001 diff --git a/auth_brute_force/views/action.xml b/auth_brute_force/views/action.xml new file mode 100644 index 000000000..7b19a7e90 --- /dev/null +++ b/auth_brute_force/views/action.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + Authentication Attempts + res.authentication.attempt + form + tree,graph + {"search_default_filter_no_success":1} + + + + Banned Remotes + res.banned.remote + form + tree,form + + + + diff --git a/auth_brute_force/views/menu.xml b/auth_brute_force/views/menu.xml new file mode 100644 index 000000000..99661eeb4 --- /dev/null +++ b/auth_brute_force/views/menu.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/auth_brute_force/views/view.xml b/auth_brute_force/views/view.xml new file mode 100644 index 000000000..7b7de28c3 --- /dev/null +++ b/auth_brute_force/views/view.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + res.authentication.attempt + + + + + + + + + + + + res.authentication.attempt + + + + + + + + + + res.authentication.attempt + + + + + + + + + + + + + + res.banned.remote + + + + + + + + + + + res.banned.remote + +
+ + + + + + + + + +
+
+
+ + + res.banned.remote + + + + + + + +
+
From 141953b351d50143fd14f1cd1cb57f65fb267252 Mon Sep 17 00:00:00 2001 From: David Vidal Date: Mon, 26 Jun 2017 16:25:30 +0200 Subject: [PATCH 2/7] [MIG] auth_brute_force: Migration to 10.0 --- auth_brute_force/README.rst | 55 +++---- auth_brute_force/__init__.py | 1 + auth_brute_force/__manifest__.py | 27 ++++ auth_brute_force/__openerp__.py | 42 ----- auth_brute_force/controllers/__init__.py | 3 +- auth_brute_force/controllers/controllers.py | 104 ------------ auth_brute_force/controllers/main.py | 76 +++++++++ auth_brute_force/data/ir_config_parameter.xml | 26 +-- auth_brute_force/i18n/auth_brute_force.pot | 150 ------------------ auth_brute_force/models/__init__.py | 1 + .../models/res_authentication_attempt.py | 30 +--- auth_brute_force/models/res_banned_remote.py | 38 +---- auth_brute_force/views/action.xml | 26 +-- auth_brute_force/views/menu.xml | 26 +-- auth_brute_force/views/view.xml | 26 +-- 15 files changed, 161 insertions(+), 470 deletions(-) create mode 100644 auth_brute_force/__manifest__.py delete mode 100644 auth_brute_force/__openerp__.py delete mode 100644 auth_brute_force/controllers/controllers.py create mode 100644 auth_brute_force/controllers/main.py delete mode 100644 auth_brute_force/i18n/auth_brute_force.pot diff --git a/auth_brute_force/README.rst b/auth_brute_force/README.rst index 60b0a73aa..2ad67486a 100644 --- a/auth_brute_force/README.rst +++ b/auth_brute_force/README.rst @@ -1,5 +1,6 @@ .. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg - :alt: License + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 =============================================================== Tracks Authentication Attempts and Prevents Brute-force Attacks @@ -18,27 +19,15 @@ will **not** indicate to the user that his IP is banned and the regular message This module realizes a call to a web API (http://ip-api.com) to try to have extra information about remote IP. -Known issue / Roadmap ---------------------- -The ID used to identify a remote request is the IP provided in the request -(key 'REMOTE_ADDR'). -Depending of server and / or user network configuration, the idenfication -of the user can be wrong, and mainly in the following cases: - -* if the Odoo server is behind an Apache / NGinx proxy without redirection, - all the request will be have the value '127.0.0.1' for the REMOTE_ADDR key; -* If some users are behind the same Internet Service Provider, if a user is - banned, all the other users will be banned too; - Configuration -------------- +============= Once installed, you can change the ir.config_parameter value for the key 'auth_brute_force.max_attempt_qty' (10 by default) that define the max number of attempts allowed before the user was banned. Usage ------ +===== Admin user have the possibility to unblock a banned IP. @@ -69,26 +58,33 @@ Screenshot .. image:: /auth_brute_force/static/description/screenshot_custom_ban.png -Usage -===== - -* go to ... - .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas - :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/149/8.0 +:alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/149/10.0 For further information, please visit: * https://www.odoo.com/forum/help-1 +Known issues / Roadmap +====================== + +* The ID used to identify a remote request is the IP provided in the request + (key 'REMOTE_ADDR'). +* Depending of server and / or user network configuration, the idenfication + of the user can be wrong, and mainly in the following cases: +* If the Odoo server is behind an Apache / NGinx proxy without redirection, + all the request will be have the value '127.0.0.1' for the REMOTE_ADDR key; +* If some users are behind the same Internet Service Provider, if a user is + banned, all the other users will be banned too; + Bug Tracker =========== -Bugs are tracked on `GitHub Issues `_. -In case of trouble, please check there if your issue has already been reported. -If you spotted it first, help us smashing it by providing a detailed and welcomed feedback -`here `_. +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. Credits ======= @@ -97,13 +93,14 @@ Contributors ------------ * Sylvain LE GAL (https://twitter.com/legalsylvain) +* David Vidal Maintainer ---------- -.. image:: http://odoo-community.org/logo.png +.. image:: https://odoo-community.org/logo.png :alt: Odoo Community Association - :target: http://odoo-community.org + :target: https://odoo-community.org This module is maintained by the OCA. @@ -111,4 +108,4 @@ OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use. -To contribute to this module, please visit http://odoo-community.org. +To contribute to this module, please visit https://odoo-community.org. diff --git a/auth_brute_force/__init__.py b/auth_brute_force/__init__.py index b8166bd36..1f9880145 100644 --- a/auth_brute_force/__init__.py +++ b/auth_brute_force/__init__.py @@ -1,3 +1,4 @@ # -*- encoding: utf-8 -*- + from . import models from . import controllers diff --git a/auth_brute_force/__manifest__.py b/auth_brute_force/__manifest__.py new file mode 100644 index 000000000..1af88faed --- /dev/null +++ b/auth_brute_force/__manifest__.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 GRAP - Sylvain LE GAL +# Copyright 2017 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). +{ + 'name': 'Authentification - Brute-force Attack', + 'version': '10.0.1.0.0', + 'category': 'Tools', + 'summary': "Tracks Authentication Attempts and Prevents Brute-force" + " Attacks module", + 'author': "GRAP, " + "Tecnativa, " + "Odoo Community Association (OCA)", + 'website': 'http://www.grap.coop', + 'license': 'AGPL-3', + 'depends': [ + 'web', + ], + 'data': [ + 'security/ir_model_access.yml', + 'data/ir_config_parameter.xml', + 'views/view.xml', + 'views/action.xml', + 'views/menu.xml', + ], + 'installable': True, +} diff --git a/auth_brute_force/__openerp__.py b/auth_brute_force/__openerp__.py deleted file mode 100644 index b05790164..000000000 --- a/auth_brute_force/__openerp__.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Tracks Authentication Attempts and Prevents Brute-force Attacks module -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author Sylvain LE GAL (https://twitter.com/legalsylvain) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -{ - 'name': 'Authentification - Brute-force Attack', - 'version': '8.0.1.0.0', - 'category': 'base', - 'summary': "Tracks Authentication Attempts and Prevents Brute-force" - " Attacks module", - 'author': "GRAP,Odoo Community Association (OCA)", - 'website': 'http://www.grap.coop', - 'license': 'AGPL-3', - 'depends': [ - 'web', - ], - 'data': [ - 'security/ir_model_access.yml', - 'data/ir_config_parameter.xml', - 'views/view.xml', - 'views/action.xml', - 'views/menu.xml', - ], -} diff --git a/auth_brute_force/controllers/__init__.py b/auth_brute_force/controllers/__init__.py index 153a9e31e..65a8c1201 100644 --- a/auth_brute_force/controllers/__init__.py +++ b/auth_brute_force/controllers/__init__.py @@ -1,2 +1,3 @@ # -*- coding: utf-8 -*- -from . import controllers + +from . import main diff --git a/auth_brute_force/controllers/controllers.py b/auth_brute_force/controllers/controllers.py deleted file mode 100644 index f752eee95..000000000 --- a/auth_brute_force/controllers/controllers.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Tracks Authentication Attempts and Prevents Brute-force Attacks module -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author Sylvain LE GAL (https://twitter.com/legalsylvain) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import logging - -from openerp import fields, http, registry, SUPERUSER_ID -from openerp.http import request -from openerp.addons.web.controllers.main import Home, ensure_db - -_logger = logging.getLogger(__name__) - - -class LoginController(Home): - @http.route() - def web_login(self, redirect=None, **kw): - if request.httprequest.method == 'POST': - ensure_db() - remote = request.httprequest.remote_addr - # Get registry and cursor - config_obj = registry(request.session.db)['ir.config_parameter'] - attempt_obj = registry( - request.session.db)['res.authentication.attempt'] - banned_remote_obj = registry( - request.session.db)['res.banned.remote'] - cursor = attempt_obj.pool.cursor() - - # Get Settings - max_attempts_qty = int(config_obj.search_read( - cursor, SUPERUSER_ID, - [('key', '=', 'auth_brute_force.max_attempt_qty')], - ['value'])[0]['value']) - - # Test if remote user is banned - banned = banned_remote_obj.search(cursor, SUPERUSER_ID, [ - ('remote', '=', remote)]) - if banned: - _logger.warning( - "Authentication tried from remote '%s'. The request has" - " been ignored because the remote has been banned after" - " %d attempts without success. Login tried : '%s'." % ( - remote, max_attempts_qty, request.params['login'])) - request.params['password'] = '' - - else: - # Try to authenticate - result = request.session.authenticate( - request.session.db, request.params['login'], - request.params['password']) - - # Log attempt - cursor.commit() - attempt_obj.create(cursor, SUPERUSER_ID, { - 'attempt_date': fields.Datetime.now(), - 'login': request.params['login'], - 'remote': remote, - 'result': banned and 'banned' or ( - result and 'successfull' or 'failed'), - }) - cursor.commit() - if not banned and not result: - # Get last bad attempts quantity - attempts_qty = len(attempt_obj.search_last_failed( - cursor, SUPERUSER_ID, remote)) - - if max_attempts_qty <= attempts_qty: - # We ban the remote - _logger.warning( - "Authentication failed from remote '%s'. " - "The remote has been banned. Login tried : '%s'." % ( - remote, request.params['login'])) - banned_remote_obj.create(cursor, SUPERUSER_ID, { - 'remote': remote, - 'ban_date': fields.Datetime.now(), - }) - cursor.commit() - - else: - _logger.warning( - "Authentication failed from remote '%s'." - " Login tried : '%s'. Attempt %d / %d." % ( - remote, request.params['login'], attempts_qty, - max_attempts_qty)) - cursor.close() - - return super(LoginController, self).web_login(redirect=redirect, **kw) diff --git a/auth_brute_force/controllers/main.py b/auth_brute_force/controllers/main.py new file mode 100644 index 000000000..222a62bdb --- /dev/null +++ b/auth_brute_force/controllers/main.py @@ -0,0 +1,76 @@ +# -*- coding: utf-8 -*- +# Copyright 2015 GRAP - Sylvain LE GAL +# Copyright 2017 Tecnativa - David Vidal +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from odoo import fields, http, registry, SUPERUSER_ID +from odoo.api import Environment +from odoo.http import request +from odoo.addons.web.controllers.main import Home, ensure_db + +_logger = logging.getLogger(__name__) + + +class LoginController(Home): + + @http.route() + def web_login(self, redirect=None, **kw): + if request.httprequest.method == 'POST': + ensure_db() + remote = request.httprequest.remote_addr + # Get registry and cursor + with registry(request.session.db).cursor() as cursor: + env = Environment(cursor, SUPERUSER_ID, {}) + config_obj = env['ir.config_parameter'] + attempt_obj = env['res.authentication.attempt'] + banned_remote_obj = env['res.banned.remote'] + # Get Settings + max_attempts_qty = int(config_obj.get_param( + 'auth_brute_force.max_attempt_qty')) + # Test if remote user is banned + banned = banned_remote_obj.search([('remote', '=', remote)]) + if banned: + request.params['password'] = '' + _logger.warning( + "Authentication tried from remote '%s'. The request " + "has been ignored because the remote has been banned " + "after %d attempts without success. Login tried : '%s'" + "." % (remote, max_attempts_qty, + request.params['login'])) + else: + # Try to authenticate + result = request.session.authenticate( + request.session.db, request.params['login'], + request.params['password']) + # Log attempt + attempt_obj.create({ + 'attempt_date': fields.Datetime.now(), + 'login': request.params['login'], + 'remote': remote, + 'result': banned and 'banned' or ( + result and 'successfull' or 'failed'), + }) + cursor.commit() + if not banned and not result: + # Get last bad attempts quantity + attempts_qty = len(attempt_obj.search_last_failed(remote)) + if max_attempts_qty <= attempts_qty: + # We ban the remote + _logger.warning( + "Authentication failed from remote '%s'. " + "The remote has been banned. Login tried : '%s'" + "." % (remote, request.params['login'])) + banned_remote_obj.sudo().create({ + 'remote': remote, + 'ban_date': fields.Datetime.now(), + }) + cursor.commit() + else: + _logger.warning( + "Authentication failed from remote '%s'." + " Login tried : '%s'. Attempt %d / %d." % ( + remote, request.params['login'], attempts_qty, + max_attempts_qty)) + return super(LoginController, self).web_login(redirect=redirect, **kw) diff --git a/auth_brute_force/data/ir_config_parameter.xml b/auth_brute_force/data/ir_config_parameter.xml index 0eab93cd2..4fe744f32 100644 --- a/auth_brute_force/data/ir_config_parameter.xml +++ b/auth_brute_force/data/ir_config_parameter.xml @@ -1,24 +1,9 @@ - - - - + + - - - - - - - - - - - - - - - + auth_brute_force.max_attempt_qty @@ -26,4 +11,5 @@ - + + diff --git a/auth_brute_force/i18n/auth_brute_force.pot b/auth_brute_force/i18n/auth_brute_force.pot deleted file mode 100644 index 52f9bf6f4..000000000 --- a/auth_brute_force/i18n/auth_brute_force.pot +++ /dev/null @@ -1,150 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * auth_brute_force -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-26 00:39+0000\n" -"PO-Revision-Date: 2015-09-26 00:39+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_banned_remote.py:75 -#, python-format -msgid "%s %s - %s %s (ISP: %s)" -msgstr "" - -#. module: auth_brute_force -#: field:res.banned.remote,active:0 -msgid "Active" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,attempt_date:0 -msgid "Attempt Date" -msgstr "" - -#. module: auth_brute_force -#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt -#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt -msgid "Authentication Attempts" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,result:0 -msgid "Authentication Result" -msgstr "" - -#. module: auth_brute_force -#: field:res.banned.remote,ban_date:0 -msgid "Ban Date" -msgstr "" - -#. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:34 -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search -#: selection:res.authentication.attempt,result:0 -#, python-format -msgid "Banned" -msgstr "" - -#. module: auth_brute_force -#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote -#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote -msgid "Banned Remotes" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,create_uid:0 -#: field:res.banned.remote,create_uid:0 -msgid "Created by" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,create_date:0 -#: field:res.banned.remote,create_date:0 -msgid "Created on" -msgstr "" - -#. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:33 -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search -#: selection:res.authentication.attempt,result:0 -#, python-format -msgid "Failed" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,id:0 -#: field:res.banned.remote,id:0 -msgid "ID" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,write_uid:0 -#: field:res.banned.remote,write_uid:0 -msgid "Last Updated by" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,write_date:0 -#: field:res.banned.remote,write_date:0 -msgid "Last Updated on" -msgstr "" - -#. module: auth_brute_force -#: field:res.banned.remote,name:0 -msgid "Name" -msgstr "" - -#. module: auth_brute_force -#: field:res.banned.remote,description:0 -msgid "Remote Description" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,remote:0 -#: field:res.banned.remote,remote:0 -msgid "Remote ID" -msgstr "" - -#. module: auth_brute_force -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search -msgid "Successful" -msgstr "" - -#. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:32 -#: selection:res.authentication.attempt,result:0 -#, python-format -msgid "Successfull" -msgstr "" - -#. module: auth_brute_force -#: field:res.authentication.attempt,login:0 -msgid "Tried Login" -msgstr "" - -#. module: auth_brute_force -#: help:res.banned.remote,active:0 -msgid "Uncheck this box to unban the remote" -msgstr "" - -#. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_banned_remote.py:77 -#, python-format -msgid "Unidentified Call from %s" -msgstr "" - -#. module: auth_brute_force -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search -msgid "Without Success" -msgstr "" - diff --git a/auth_brute_force/models/__init__.py b/auth_brute_force/models/__init__.py index 85cc3145c..f5bb7766e 100644 --- a/auth_brute_force/models/__init__.py +++ b/auth_brute_force/models/__init__.py @@ -1,3 +1,4 @@ # -*- encoding: utf-8 -*- + from . import res_banned_remote from . import res_authentication_attempt diff --git a/auth_brute_force/models/res_authentication_attempt.py b/auth_brute_force/models/res_authentication_attempt.py index 84e735bd3..a75542816 100644 --- a/auth_brute_force/models/res_authentication_attempt.py +++ b/auth_brute_force/models/res_authentication_attempt.py @@ -1,27 +1,8 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Tracks Authentication Attempts and Prevents Brute-force Attacks module -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author Sylvain LE GAL (https://twitter.com/legalsylvain) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# -*- coding: utf-8 -*- +# Copyright 2015 GRAP - Sylvain LE GAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from openerp import models, fields, api -from openerp.tools.translate import _ +from odoo import _, api, fields, models class ResAuthenticationAttempt(models.Model): @@ -36,11 +17,8 @@ class ResAuthenticationAttempt(models.Model): # Column Section attempt_date = fields.Datetime(string='Attempt Date') - login = fields.Char(string='Tried Login') - remote = fields.Char(string='Remote ID') - result = fields.Selection( selection=_ATTEMPT_RESULT, string='Authentication Result') diff --git a/auth_brute_force/models/res_banned_remote.py b/auth_brute_force/models/res_banned_remote.py index 661dfc8a5..a10caad47 100644 --- a/auth_brute_force/models/res_banned_remote.py +++ b/auth_brute_force/models/res_banned_remote.py @@ -1,29 +1,11 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Tracks Authentication Attempts and Prevents Brute-force Attacks module -# Copyright (C) 2015-Today GRAP (http://www.grap.coop) -# @author Sylvain LE GAL (https://twitter.com/legalsylvain) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# -*- coding: utf-8 -*- +# Copyright 2015 GRAP - Sylvain LE GAL +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import urllib import json -from openerp import models, fields, api +from odoo import api, fields, models class ResBannedRemote(models.Model): @@ -32,23 +14,15 @@ class ResBannedRemote(models.Model): _GEOLOCALISATION_URL = "http://ip-api.com/json/{}" - # Default Section - def _default_ban_date(self): - return fields.Datetime.now() - # Column Section description = fields.Text( string='Description', compute='_compute_description', store=True) - ban_date = fields.Datetime( - string='Ban Date', required=True, default=_default_ban_date) - + string='Ban Date', required=True, default=fields.Datetime.now) remote = fields.Char(string='Remote ID', required=True) - active = fields.Boolean( string='Active', help="Uncheck this box to unban the remote", default=True) - attempt_ids = fields.Many2many( comodel_name='res.authentication.attempt', string='Attempts', compute='_compute_attempt_ids') @@ -68,4 +42,4 @@ class ResBannedRemote(models.Model): def _compute_attempt_ids(self): for item in self: attempt_obj = self.env['res.authentication.attempt'] - item.attempt_ids = attempt_obj.search_last_failed(item.remote).ids + item.attempt_ids = attempt_obj.search_last_failed(item.remote) diff --git a/auth_brute_force/views/action.xml b/auth_brute_force/views/action.xml index 7b19a7e90..ea7ac4862 100644 --- a/auth_brute_force/views/action.xml +++ b/auth_brute_force/views/action.xml @@ -1,24 +1,7 @@ - - - - - - - - - - - - - - - - - - - - + + Authentication Attempts @@ -35,5 +18,4 @@ tree,form - - + diff --git a/auth_brute_force/views/menu.xml b/auth_brute_force/views/menu.xml index 99661eeb4..cd246ae33 100644 --- a/auth_brute_force/views/menu.xml +++ b/auth_brute_force/views/menu.xml @@ -1,24 +1,7 @@ - - - - - - - - - - - - - - - - - - - - + + - - + diff --git a/auth_brute_force/views/view.xml b/auth_brute_force/views/view.xml index 7b7de28c3..4865978d7 100644 --- a/auth_brute_force/views/view.xml +++ b/auth_brute_force/views/view.xml @@ -1,24 +1,7 @@ - - - - - - - - - - - - - - - - - - - - + + @@ -94,5 +77,4 @@ - - + From 0b609ffb9c9106bc865fd17e541d0c719752d2d6 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 13 Mar 2016 03:40:28 -0400 Subject: [PATCH 3/7] OCA Transbot updated translations from Transifex --- auth_brute_force/i18n/am.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/ar.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/bg.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/bs.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/ca.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/cs.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/da.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/de.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/el_GR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/en_GB.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es.po | 164 ++++++++++++++++++++++++++++++ auth_brute_force/i18n/es_AR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_CL.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_CO.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_CR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_DO.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_EC.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_ES.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_MX.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_PE.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_PY.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/es_VE.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/et.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/eu.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/fa.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/fi.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/fr.po | 125 +++++++++++++++-------- auth_brute_force/i18n/fr_CA.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/fr_CH.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/gl.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/gl_ES.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/he.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/hr.po | 163 +++++++++++++++++++++++++++++ auth_brute_force/i18n/hr_HR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/hu.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/id.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/it.po | 163 +++++++++++++++++++++++++++++ auth_brute_force/i18n/ja.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/ko.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/lt.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/lt_LT.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/lv.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/mk.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/mn.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/nb.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/nb_NO.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/nl.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/nl_BE.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/nl_NL.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/pl.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/pt.po | 164 ++++++++++++++++++++++++++++++ auth_brute_force/i18n/pt_BR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/pt_PT.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/ro.po | 164 ++++++++++++++++++++++++++++++ auth_brute_force/i18n/ru.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/sk.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/sl.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/sr.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/sr@latin.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/sv.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/th.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/tr.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/tr_TR.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/uk.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/vi.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/vi_VN.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/zh_CN.po | 162 +++++++++++++++++++++++++++++ auth_brute_force/i18n/zh_TW.po | 162 +++++++++++++++++++++++++++++ 68 files changed, 10946 insertions(+), 41 deletions(-) create mode 100644 auth_brute_force/i18n/am.po create mode 100644 auth_brute_force/i18n/ar.po create mode 100644 auth_brute_force/i18n/bg.po create mode 100644 auth_brute_force/i18n/bs.po create mode 100644 auth_brute_force/i18n/ca.po create mode 100644 auth_brute_force/i18n/cs.po create mode 100644 auth_brute_force/i18n/da.po create mode 100644 auth_brute_force/i18n/de.po create mode 100644 auth_brute_force/i18n/el_GR.po create mode 100644 auth_brute_force/i18n/en_GB.po create mode 100644 auth_brute_force/i18n/es.po create mode 100644 auth_brute_force/i18n/es_AR.po create mode 100644 auth_brute_force/i18n/es_CL.po create mode 100644 auth_brute_force/i18n/es_CO.po create mode 100644 auth_brute_force/i18n/es_CR.po create mode 100644 auth_brute_force/i18n/es_DO.po create mode 100644 auth_brute_force/i18n/es_EC.po create mode 100644 auth_brute_force/i18n/es_ES.po create mode 100644 auth_brute_force/i18n/es_MX.po create mode 100644 auth_brute_force/i18n/es_PE.po create mode 100644 auth_brute_force/i18n/es_PY.po create mode 100644 auth_brute_force/i18n/es_VE.po create mode 100644 auth_brute_force/i18n/et.po create mode 100644 auth_brute_force/i18n/eu.po create mode 100644 auth_brute_force/i18n/fa.po create mode 100644 auth_brute_force/i18n/fi.po create mode 100644 auth_brute_force/i18n/fr_CA.po create mode 100644 auth_brute_force/i18n/fr_CH.po create mode 100644 auth_brute_force/i18n/gl.po create mode 100644 auth_brute_force/i18n/gl_ES.po create mode 100644 auth_brute_force/i18n/he.po create mode 100644 auth_brute_force/i18n/hr.po create mode 100644 auth_brute_force/i18n/hr_HR.po create mode 100644 auth_brute_force/i18n/hu.po create mode 100644 auth_brute_force/i18n/id.po create mode 100644 auth_brute_force/i18n/it.po create mode 100644 auth_brute_force/i18n/ja.po create mode 100644 auth_brute_force/i18n/ko.po create mode 100644 auth_brute_force/i18n/lt.po create mode 100644 auth_brute_force/i18n/lt_LT.po create mode 100644 auth_brute_force/i18n/lv.po create mode 100644 auth_brute_force/i18n/mk.po create mode 100644 auth_brute_force/i18n/mn.po create mode 100644 auth_brute_force/i18n/nb.po create mode 100644 auth_brute_force/i18n/nb_NO.po create mode 100644 auth_brute_force/i18n/nl.po create mode 100644 auth_brute_force/i18n/nl_BE.po create mode 100644 auth_brute_force/i18n/nl_NL.po create mode 100644 auth_brute_force/i18n/pl.po create mode 100644 auth_brute_force/i18n/pt.po create mode 100644 auth_brute_force/i18n/pt_BR.po create mode 100644 auth_brute_force/i18n/pt_PT.po create mode 100644 auth_brute_force/i18n/ro.po create mode 100644 auth_brute_force/i18n/ru.po create mode 100644 auth_brute_force/i18n/sk.po create mode 100644 auth_brute_force/i18n/sl.po create mode 100644 auth_brute_force/i18n/sr.po create mode 100644 auth_brute_force/i18n/sr@latin.po create mode 100644 auth_brute_force/i18n/sv.po create mode 100644 auth_brute_force/i18n/th.po create mode 100644 auth_brute_force/i18n/tr.po create mode 100644 auth_brute_force/i18n/tr_TR.po create mode 100644 auth_brute_force/i18n/uk.po create mode 100644 auth_brute_force/i18n/vi.po create mode 100644 auth_brute_force/i18n/vi_VN.po create mode 100644 auth_brute_force/i18n/zh_CN.po create mode 100644 auth_brute_force/i18n/zh_TW.po diff --git a/auth_brute_force/i18n/am.po b/auth_brute_force/i18n/am.po new file mode 100644 index 000000000..a7e120ef6 --- /dev/null +++ b/auth_brute_force/i18n/am.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Amharic (https://www.transifex.com/oca/teams/23907/am/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: am\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/ar.po b/auth_brute_force/i18n/ar.po new file mode 100644 index 000000000..039a61947 --- /dev/null +++ b/auth_brute_force/i18n/ar.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Arabic (https://www.transifex.com/oca/teams/23907/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "أنشئ بواسطة" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "أنشئ في" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "الوصف" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "اسم العرض" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "المعرف" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "آخر تعديل في" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "آخر تحديث بواسطة" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "آخر تحديث في" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/bg.po b/auth_brute_force/i18n/bg.po new file mode 100644 index 000000000..c0268e160 --- /dev/null +++ b/auth_brute_force/i18n/bg.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Bulgarian (https://www.transifex.com/oca/teams/23907/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Активен" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Създадено от" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Създадено на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Описание" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Последно обновено на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Последно обновено от" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Последно обновено на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/bs.po b/auth_brute_force/i18n/bs.po new file mode 100644 index 000000000..fb29cb4c3 --- /dev/null +++ b/auth_brute_force/i18n/bs.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Bosnian (https://www.transifex.com/oca/teams/23907/bs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: bs\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Prikaži naziv" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zadnje mijenjano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/ca.po b/auth_brute_force/i18n/ca.po new file mode 100644 index 000000000..6568211a8 --- /dev/null +++ b/auth_brute_force/i18n/ca.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Catalan (https://www.transifex.com/oca/teams/23907/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Actiu" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creat per" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creat el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripció" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Veure el nom" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Fracassat" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Darrera modificació el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Darrera Actualització per" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Darrera Actualització el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/cs.po b/auth_brute_force/i18n/cs.po new file mode 100644 index 000000000..ff836e2d5 --- /dev/null +++ b/auth_brute_force/i18n/cs.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Czech (https://www.transifex.com/oca/teams/23907/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: cs\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Vytvořil(a)" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Vytvořeno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Popis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Zobrazovaný název" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Naposled upraveno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Naposled upraveno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Naposled upraveno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/da.po b/auth_brute_force/i18n/da.po new file mode 100644 index 000000000..223188918 --- /dev/null +++ b/auth_brute_force/i18n/da.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Danish (https://www.transifex.com/oca/teams/23907/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktiv" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Oprettet af" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Oprettet den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Beskrivelse" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Vist navn" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "Id" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Sidst ændret den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Sidst opdateret af" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Sidst opdateret den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/de.po b/auth_brute_force/i18n/de.po new file mode 100644 index 000000000..922f58431 --- /dev/null +++ b/auth_brute_force/i18n/de.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktiv" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Versuchsdatum" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Anläufe" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Authentifizierungsversuche" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Ergebnis der Authentifizierung" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Sperrdatum" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Gesperrt" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Gesperrte Remotes" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Erstellt von" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Erstellt am:" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Beschreibung" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Gescheitert" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zuletzt geändert am" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zuletzt aktualisiert von" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zuletzt aktualisiert am" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "Ferne ID" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Erfolgreich" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Erfolgreich" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Versuchte Anmeldung" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Diese Box abwählen, um Fernnutzer zu entsperren" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Erfolglos" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/el_GR.po b/auth_brute_force/i18n/el_GR.po new file mode 100644 index 000000000..37dba0aea --- /dev/null +++ b/auth_brute_force/i18n/el_GR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Greek (Greece) (https://www.transifex.com/oca/teams/23907/el_GR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: el_GR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Δημιουργήθηκε από " + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Περιγραφή" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "Κωδικός" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Τελευταία ενημέρωση από" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Τελευταία ενημέρωση στις" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/en_GB.po b/auth_brute_force/i18n/en_GB.po new file mode 100644 index 000000000..63a0898df --- /dev/null +++ b/auth_brute_force/i18n/en_GB.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: English (United Kingdom) (https://www.transifex.com/oca/teams/23907/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Created by" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Created on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Description" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Last Modified on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es.po b/auth_brute_force/i18n/es.po new file mode 100644 index 000000000..0dfd57312 --- /dev/null +++ b/auth_brute_force/i18n/es.po @@ -0,0 +1,164 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +# Pedro M. Baeza , 2017 +# enjolras , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-02 18:39+0000\n" +"PO-Revision-Date: 2018-03-02 18:39+0000\n" +"Last-Translator: enjolras , 2018\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Activo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Fecha de intento" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Intentos" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Intentos de autenticación" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Resultado de la autenticación" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Fecha de bloqueo" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Bloqueado" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Remotos bloqueados" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Fallido" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "ID remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Existoso" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Existoso" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Desmarque esta casilla para desbloquear el remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Sin éxito" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "res.authentication.attempt" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "res.banned.remote" diff --git a/auth_brute_force/i18n/es_AR.po b/auth_brute_force/i18n/es_AR.po new file mode 100644 index 000000000..5a043c250 --- /dev/null +++ b/auth_brute_force/i18n/es_AR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Argentina) (https://www.transifex.com/oca/teams/23907/es_AR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_AR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización realizada por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_CL.po b/auth_brute_force/i18n/es_CL.po new file mode 100644 index 000000000..c79a0732b --- /dev/null +++ b/auth_brute_force/i18n/es_CL.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Chile) (https://www.transifex.com/oca/teams/23907/es_CL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_CL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID (identificación)" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_CO.po b/auth_brute_force/i18n/es_CO.po new file mode 100644 index 000000000..3b3601eb0 --- /dev/null +++ b/auth_brute_force/i18n/es_CO.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Colombia) (https://www.transifex.com/oca/teams/23907/es_CO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_CO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre Público" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última Modificación el" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Actualizado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Actualizado" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_CR.po b/auth_brute_force/i18n/es_CR.po new file mode 100644 index 000000000..53dc51e4c --- /dev/null +++ b/auth_brute_force/i18n/es_CR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/oca/teams/23907/es_CR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_CR\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Ultima actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_DO.po b/auth_brute_force/i18n/es_DO.po new file mode 100644 index 000000000..f7b7dca6d --- /dev/null +++ b/auth_brute_force/i18n/es_DO.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Dominican Republic) (https://www.transifex.com/oca/teams/23907/es_DO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_DO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_EC.po b/auth_brute_force/i18n/es_EC.po new file mode 100644 index 000000000..322d7c598 --- /dev/null +++ b/auth_brute_force/i18n/es_EC.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Ecuador) (https://www.transifex.com/oca/teams/23907/es_EC/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_EC\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID (identificación)" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización de" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_ES.po b/auth_brute_force/i18n/es_ES.po new file mode 100644 index 000000000..8e96c13f7 --- /dev/null +++ b/auth_brute_force/i18n/es_ES.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Spain) (https://www.transifex.com/oca/teams/23907/es_ES/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_ES\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre para mostrar" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_MX.po b/auth_brute_force/i18n/es_MX.po new file mode 100644 index 000000000..be5210c5d --- /dev/null +++ b/auth_brute_force/i18n/es_MX.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Mexico) (https://www.transifex.com/oca/teams/23907/es_MX/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_MX\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre desplegado" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Ultima modificacion realizada" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Ultima actualizacion por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima actualización realizada" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_PE.po b/auth_brute_force/i18n/es_PE.po new file mode 100644 index 000000000..ccc84dee1 --- /dev/null +++ b/auth_brute_force/i18n/es_PE.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Peru) (https://www.transifex.com/oca/teams/23907/es_PE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_PE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nombre a Mostrar" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Ultima Modificación en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Actualizado última vez por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima Actualización" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_PY.po b/auth_brute_force/i18n/es_PY.po new file mode 100644 index 000000000..5f2f29190 --- /dev/null +++ b/auth_brute_force/i18n/es_PY.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Paraguay) (https://www.transifex.com/oca/teams/23907/es_PY/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_PY\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Ultima actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/es_VE.po b/auth_brute_force/i18n/es_VE.po new file mode 100644 index 000000000..563535ead --- /dev/null +++ b/auth_brute_force/i18n/es_VE.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Spanish (Venezuela) (https://www.transifex.com/oca/teams/23907/es_VE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_VE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descripción" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Mostrar nombre" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Modificada por última vez" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última actualización realizada por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima actualizacion en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/et.po b/auth_brute_force/i18n/et.po new file mode 100644 index 000000000..40c5ebd8d --- /dev/null +++ b/auth_brute_force/i18n/et.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Estonian (https://www.transifex.com/oca/teams/23907/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Loonud" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Loodud" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Kirjeldus" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Näidatav nimi" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Viimati muudetud" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Viimati uuendatud" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Viimati uuendatud" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/eu.po b/auth_brute_force/i18n/eu.po new file mode 100644 index 000000000..10aa5533b --- /dev/null +++ b/auth_brute_force/i18n/eu.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Basque (https://www.transifex.com/oca/teams/23907/eu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: eu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Nork sortua" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Created on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Deskribapena" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Izena erakutsi" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/fa.po b/auth_brute_force/i18n/fa.po new file mode 100644 index 000000000..b5d4e8f3d --- /dev/null +++ b/auth_brute_force/i18n/fa.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Persian (https://www.transifex.com/oca/teams/23907/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fa\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "ایجاد شده توسط" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "ایجاد شده در" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "توصیف" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "نام نمایشی" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "شناسه" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "تاریخ آخرین به‌روزرسانی" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "آخرین به روز رسانی توسط" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "آخرین به روز رسانی در" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/fi.po b/auth_brute_force/i18n/fi.po new file mode 100644 index 000000000..4c22a5b92 --- /dev/null +++ b/auth_brute_force/i18n/fi.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Finnish (https://www.transifex.com/oca/teams/23907/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktiivinen" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Luonut" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Luotu" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Kuvaus" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nimi" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Epäonnistunut" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Viimeksi muokattu" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Viimeksi päivittänyt" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Viimeksi päivitetty" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/fr.po b/auth_brute_force/i18n/fr.po index 7e28872e4..9b8d8fb9e 100644 --- a/auth_brute_force/i18n/fr.po +++ b/auth_brute_force/i18n/fr.po @@ -1,36 +1,39 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * auth_brute_force -# +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +# Nicolas JEUDY , 2017 msgid "" msgstr "" -"Project-Id-Version: Odoo Server 8.0\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-26 00:34+0000\n" -"PO-Revision-Date: 2015-09-26 00:34+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" +"POT-Creation-Date: 2017-12-01 02:09+0000\n" +"PO-Revision-Date: 2017-12-01 02:09+0000\n" +"Last-Translator: Nicolas JEUDY , 2017\n" +"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" -"Plural-Forms: \n" +"Language: fr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_banned_remote.py:75 -#, python-format -msgid "%s %s - %s %s (ISP: %s)" -msgstr "%s %s - %s %s (FAI : %s)" - -#. module: auth_brute_force -#: field:res.banned.remote,active:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active msgid "Active" msgstr "Active" #. module: auth_brute_force -#: field:res.authentication.attempt,attempt_date:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date msgid "Attempt Date" msgstr "Date de la tentative" +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Tentatives" + #. module: auth_brute_force #: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt #: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt @@ -38,18 +41,18 @@ msgid "Authentication Attempts" msgstr "Tentative d'authentification" #. module: auth_brute_force -#: field:res.authentication.attempt,result:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result msgid "Authentication Result" msgstr "Résultat de l'authentification" #. module: auth_brute_force -#: field:res.banned.remote,ban_date:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date msgid "Ban Date" msgstr "Ban Date" #. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:34 -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search #: selection:res.authentication.attempt,result:0 #, python-format msgid "Banned" @@ -62,59 +65,99 @@ msgid "Banned Remotes" msgstr "Clients distants bannis" #. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:33 -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Description" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search #: selection:res.authentication.attempt,result:0 #, python-format msgid "Failed" msgstr "Echoué" #. module: auth_brute_force -#: field:res.banned.remote,name:0 -msgid "Name" -msgstr "Nom" +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" #. module: auth_brute_force -#: field:res.banned.remote,description:0 -msgid "Description" -msgstr "Description" +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Mis à jour par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Mis à jour le" #. module: auth_brute_force -#: field:res.authentication.attempt,remote:0 -#: field:res.banned.remote,remote:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote msgid "Remote ID" msgstr "ID du client Distant" #. module: auth_brute_force -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search msgid "Successful" msgstr "Réussie" #. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_authentication_attempt.py:32 +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 #: selection:res.authentication.attempt,result:0 #, python-format msgid "Successfull" msgstr "Réussie" #. module: auth_brute_force -#: field:res.authentication.attempt,login:0 +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login msgid "Tried Login" msgstr "Idenfiant essayé" #. module: auth_brute_force -#: help:res.banned.remote,active:0 +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active msgid "Uncheck this box to unban the remote" msgstr "Décochez cette case afin d'annuler l'exclusion du client distant" #. module: auth_brute_force -#: code:addons/auth_brute_force/models/res_banned_remote.py:77 -#, python-format -msgid "Unidentified Call from %s" -msgstr "Appel non identifié depuis %s" - -#. module: auth_brute_force -#: view:res.authentication.attempt:auth_brute_force.view_res_authentication_attempt_search +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search msgid "Without Success" msgstr "Sans succès" +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "res.authentication.attempt" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "res.authentication.attempt" diff --git a/auth_brute_force/i18n/fr_CA.po b/auth_brute_force/i18n/fr_CA.po new file mode 100644 index 000000000..11cd0959c --- /dev/null +++ b/auth_brute_force/i18n/fr_CA.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (Canada) (https://www.transifex.com/oca/teams/23907/fr_CA/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr_CA\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Description" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Afficher le nom" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "Identifiant" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/fr_CH.po b/auth_brute_force/i18n/fr_CH.po new file mode 100644 index 000000000..d0487e9b4 --- /dev/null +++ b/auth_brute_force/i18n/fr_CH.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: French (Switzerland) (https://www.transifex.com/oca/teams/23907/fr_CH/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr_CH\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Actif" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Créé par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Créé le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nom affiché" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Modifié par" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Modifié le" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/gl.po b/auth_brute_force/i18n/gl.po new file mode 100644 index 000000000..eb998fac1 --- /dev/null +++ b/auth_brute_force/i18n/gl.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Galician (https://www.transifex.com/oca/teams/23907/gl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: gl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creado en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descrición" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última modificación" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "ültima actualización por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última actualización en" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/gl_ES.po b/auth_brute_force/i18n/gl_ES.po new file mode 100644 index 000000000..8080c44e5 --- /dev/null +++ b/auth_brute_force/i18n/gl_ES.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Galician (Spain) (https://www.transifex.com/oca/teams/23907/gl_ES/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: gl_ES\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/he.po b/auth_brute_force/i18n/he.po new file mode 100644 index 000000000..b748172ea --- /dev/null +++ b/auth_brute_force/i18n/he.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Hebrew (https://www.transifex.com/oca/teams/23907/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "נוצר על ידי" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "נוצר ב-" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "תיאור" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "השם המוצג" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "מזהה" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "תאריך שינוי אחרון" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "עודכן לאחרונה על ידי" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "עודכן לאחרונה על" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/hr.po b/auth_brute_force/i18n/hr.po new file mode 100644 index 000000000..a98fd9fcf --- /dev/null +++ b/auth_brute_force/i18n/hr.po @@ -0,0 +1,163 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# Bole , 2017 +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-02 18:39+0000\n" +"PO-Revision-Date: 2018-03-02 18:39+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktivno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Datum pokušaja" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Pokušaji" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Pokušaji prijave" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Rezultat prijave" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Datum zabrane" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Zabranjeni" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Zabranjeni poslužiteljji" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Naziv " + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Neuspjelo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zadnje modificirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zadnje ažuriranje" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "ID udaljenog" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Uspješno" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Uspješno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Pokušaj prijave" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Odznačite ovdje za skidanje zabrane udaljenom poslužitelju" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Neuspješno" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "res.authentication.attempt" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "res.banned.remote" diff --git a/auth_brute_force/i18n/hr_HR.po b/auth_brute_force/i18n/hr_HR.po new file mode 100644 index 000000000..60841ce2b --- /dev/null +++ b/auth_brute_force/i18n/hr_HR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Croatian (Croatia) (https://www.transifex.com/oca/teams/23907/hr_HR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr_HR\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktivan" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Kreirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zadnje modificirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zadnji ažurirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zadnje ažurirano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/hu.po b/auth_brute_force/i18n/hu.po new file mode 100644 index 000000000..439960436 --- /dev/null +++ b/auth_brute_force/i18n/hu.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Hungarian (https://www.transifex.com/oca/teams/23907/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Készítette" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Létrehozás dátuma" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Leírás" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Név megjelenítése" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Utolsó frissítés dátuma" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Utoljára frissítve, által" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Utoljára frissítve " + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/id.po b/auth_brute_force/i18n/id.po new file mode 100644 index 000000000..f79b531d5 --- /dev/null +++ b/auth_brute_force/i18n/id.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Indonesian (https://www.transifex.com/oca/teams/23907/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Dibuat oleh" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Dibuat pada" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Keterangan" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Terakhir Dimodifikasi pada" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Diperbaharui oleh" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Diperbaharui pada" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/it.po b/auth_brute_force/i18n/it.po new file mode 100644 index 000000000..6c397c7dd --- /dev/null +++ b/auth_brute_force/i18n/it.po @@ -0,0 +1,163 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +# Paolo Valier , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-06 02:24+0000\n" +"PO-Revision-Date: 2018-01-06 02:24+0000\n" +"Last-Translator: Paolo Valier , 2017\n" +"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Attivo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Data Tentativo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Tentativi" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Tentativi di Autenticazione" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Risultato dell'Autenticazione" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Data dell'Interdizione" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Interdetto" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creato da" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creato il" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descrizione" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nome da visualizzare" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Fallita" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Ultima modifica il" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Last Updated on" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "ID Remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Riuscito" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Riuscito" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Tentata Autenticazione" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Senza successo" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "res.authentication.attempt" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "res.banned.remote" diff --git a/auth_brute_force/i18n/ja.po b/auth_brute_force/i18n/ja.po new file mode 100644 index 000000000..0e55ae587 --- /dev/null +++ b/auth_brute_force/i18n/ja.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Japanese (https://www.transifex.com/oca/teams/23907/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "作成者" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "作成日" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "説明" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "表示名" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "最終更新日" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "最終更新者" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "最終更新日" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/ko.po b/auth_brute_force/i18n/ko.po new file mode 100644 index 000000000..5c9ea8ceb --- /dev/null +++ b/auth_brute_force/i18n/ko.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Korean (https://www.transifex.com/oca/teams/23907/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "작성자" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "작성일" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "설명" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "표시 이름" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "최근 수정" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "최근 갱신한 사람" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "최근 갱신 날짜" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/lt.po b/auth_brute_force/i18n/lt.po new file mode 100644 index 000000000..2f725fb8a --- /dev/null +++ b/auth_brute_force/i18n/lt.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Lithuanian (https://www.transifex.com/oca/teams/23907/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Aprašymas" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Vaizduojamas pavadinimas" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Paskutinį kartą keista" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/lt_LT.po b/auth_brute_force/i18n/lt_LT.po new file mode 100644 index 000000000..7aca15b08 --- /dev/null +++ b/auth_brute_force/i18n/lt_LT.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Lithuanian (Lithuania) (https://www.transifex.com/oca/teams/23907/lt_LT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt_LT\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Sukūrė" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Sukurta" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Paskutinį kartą atnaujino" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Paskutinį kartą atnaujinta" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/lv.po b/auth_brute_force/i18n/lv.po new file mode 100644 index 000000000..4bb0e03a7 --- /dev/null +++ b/auth_brute_force/i18n/lv.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Latvian (https://www.transifex.com/oca/teams/23907/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Izveidoja" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Izveidots" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Apraksts" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Pēdējo reizi atjaunoja" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Pēdējās izmaiņas" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/mk.po b/auth_brute_force/i18n/mk.po new file mode 100644 index 000000000..f6588cc42 --- /dev/null +++ b/auth_brute_force/i18n/mk.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Macedonian (https://www.transifex.com/oca/teams/23907/mk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: mk\n" +"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Креирано од" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Креирано на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Опис" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Прикажи име" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Последна промена на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Последно ажурирање од" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Последно ажурирање на" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/mn.po b/auth_brute_force/i18n/mn.po new file mode 100644 index 000000000..941991132 --- /dev/null +++ b/auth_brute_force/i18n/mn.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Mongolian (https://www.transifex.com/oca/teams/23907/mn/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: mn\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Үүсгэгч" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Үүсгэсэн" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Тодорхойлолт" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Дэлгэцийн Нэр" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Сүүлийн засвар хийсэн огноо" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Сүүлийн засвар хийсэн" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Сүүлийн засвар хийсэн огноо" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/nb.po b/auth_brute_force/i18n/nb.po new file mode 100644 index 000000000..f8173fec4 --- /dev/null +++ b/auth_brute_force/i18n/nb.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Norwegian Bokmål (https://www.transifex.com/oca/teams/23907/nb/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Opprettet av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Opprettet den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Beskrivelse" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Visnings navn" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Sist oppdatert " + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Sist oppdatert" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/nb_NO.po b/auth_brute_force/i18n/nb_NO.po new file mode 100644 index 000000000..b290dfd23 --- /dev/null +++ b/auth_brute_force/i18n/nb_NO.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Norwegian Bokmål (Norway) (https://www.transifex.com/oca/teams/23907/nb_NO/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nb_NO\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Laget av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Laget den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Sist endret den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Sist oppdatert av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Sist oppdatert den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/nl.po b/auth_brute_force/i18n/nl.po new file mode 100644 index 000000000..bdc486c5e --- /dev/null +++ b/auth_brute_force/i18n/nl.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Dutch (https://www.transifex.com/oca/teams/23907/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Actief" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Omschrijving" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Te tonen naam" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Laatst bijgewerkt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/nl_BE.po b/auth_brute_force/i18n/nl_BE.po new file mode 100644 index 000000000..2ac85c40d --- /dev/null +++ b/auth_brute_force/i18n/nl_BE.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Dutch (Belgium) (https://www.transifex.com/oca/teams/23907/nl_BE/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_BE\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Gemaakt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Gemaakt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Omschrijving" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Laatst Aangepast op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/nl_NL.po b/auth_brute_force/i18n/nl_NL.po new file mode 100644 index 000000000..88fe72d26 --- /dev/null +++ b/auth_brute_force/i18n/nl_NL.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# Peter Hageman , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-01 02:09+0000\n" +"PO-Revision-Date: 2017-12-01 02:09+0000\n" +"Last-Translator: Peter Hageman , 2017\n" +"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/teams/23907/nl_NL/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl_NL\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Actief" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Aangemaakt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Omschrijving" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "weergavenaam" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Mislukt" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Laatst gewijzigd op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Laatst bijgewerkt door" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Laatst bijgewerkt op" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/pl.po b/auth_brute_force/i18n/pl.po new file mode 100644 index 000000000..a390c4f4f --- /dev/null +++ b/auth_brute_force/i18n/pl.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Polish (https://www.transifex.com/oca/teams/23907/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Utworzone przez" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Utworzono" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Wyświetlana nazwa " + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Ostatnio modyfikowano" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Ostatnio modyfikowane przez" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ostatnia zmiana" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/pt.po b/auth_brute_force/i18n/pt.po new file mode 100644 index 000000000..d1dffecd3 --- /dev/null +++ b/auth_brute_force/i18n/pt.po @@ -0,0 +1,164 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +# Pedro Castro Silva , 2017 +# Pedro Castro Silva , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-01-27 01:58+0000\n" +"PO-Revision-Date: 2018-01-27 01:58+0000\n" +"Last-Translator: Pedro Castro Silva , 2018\n" +"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Ativo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Data da Tentativa" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Tentativas" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Tentativas de Autenticação" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Resultado da Autenticação" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Data de Interdição" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Interditado" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Remotos Interditados" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Criado em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descrição" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nome" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Falhou" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última Modificação Em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última Modificação Por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última Atualização Em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "ID do Remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Sucesso" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Sucesso" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Tentou Login" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Desmarque esta opção para desinterditar o remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Sem sucesso" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "res.authentication.attempt" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "res.banned.remote" diff --git a/auth_brute_force/i18n/pt_BR.po b/auth_brute_force/i18n/pt_BR.po new file mode 100644 index 000000000..47566993d --- /dev/null +++ b/auth_brute_force/i18n/pt_BR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Ativo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Data da tentativa" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Tentativas" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Tentativas de autenticação" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Resultado da autenticação" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Proibido Data" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Proibido" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Remotos proibidos" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Criado em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descrição" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nome para Mostrar" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Falhou" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "Identificação" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última atualização em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última atualização por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última atualização em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "Identificação Remota" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Sucesso" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Sucesso" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Tentativa de Login" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Desmarque esta caixa para desbloquear o remoto" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Sem Sucesso" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/pt_PT.po b/auth_brute_force/i18n/pt_PT.po new file mode 100644 index 000000000..b69b3ea58 --- /dev/null +++ b/auth_brute_force/i18n/pt_PT.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Portuguese (Portugal) (https://www.transifex.com/oca/teams/23907/pt_PT/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_PT\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Ativo" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Criado por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Criado em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descrição" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nome a Apresentar" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Última Modificação Em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Última Atualização Por" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Última Atualização Em" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/ro.po b/auth_brute_force/i18n/ro.po new file mode 100644 index 000000000..163cf0b48 --- /dev/null +++ b/auth_brute_force/i18n/ro.po @@ -0,0 +1,164 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +# Daniel Schweiger , 2017 +# Dorin Hongu , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-12-16 02:16+0000\n" +"PO-Revision-Date: 2017-12-16 02:16+0000\n" +"Last-Translator: Dorin Hongu , 2017\n" +"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ro\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Activ" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Creat de" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Creat la" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Descriere" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Nume Afişat" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Ultima actualizare în" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Ultima actualizare făcută de" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Ultima actualizare la" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/ru.po b/auth_brute_force/i18n/ru.po new file mode 100644 index 000000000..416753277 --- /dev/null +++ b/auth_brute_force/i18n/ru.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Russian (https://www.transifex.com/oca/teams/23907/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Создано" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Создан" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Описание" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Последний раз обновлено" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Последний раз обновлено" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/sk.po b/auth_brute_force/i18n/sk.po new file mode 100644 index 000000000..5509ced63 --- /dev/null +++ b/auth_brute_force/i18n/sk.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovak (https://www.transifex.com/oca/teams/23907/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktívne" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Vytvoril" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Vytvorené" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Popis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Zobraziť meno" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Posledná modifikácia" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Naposledy upravoval" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Naposledy upravované" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/sl.po b/auth_brute_force/i18n/sl.po new file mode 100644 index 000000000..2482c11b1 --- /dev/null +++ b/auth_brute_force/i18n/sl.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktivno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Datum poskusa" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Poskusi" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Poskusov overjanja" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Rezultati overjanja" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Datum prepovedi" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Prepovedan" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Prepovedani oddaljeni" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Ustvaril" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Ustvarjeno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Prikazni naziv" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Neuspešno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zadnjič spremenjeno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zadnji posodobil" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zadnjič posodobljeno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "Oddaljeni ID" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Uspešno" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Uspešno" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Poskusov prijave" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Odstrani označbo za odstranitev prepovedi oddaljenih" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Brez uspeha" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/sr.po b/auth_brute_force/i18n/sr.po new file mode 100644 index 000000000..212b0dfd6 --- /dev/null +++ b/auth_brute_force/i18n/sr.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Serbian (https://www.transifex.com/oca/teams/23907/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Kreiran" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/sr@latin.po b/auth_brute_force/i18n/sr@latin.po new file mode 100644 index 000000000..9a61e1012 --- /dev/null +++ b/auth_brute_force/i18n/sr@latin.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Serbian (Latin) (https://www.transifex.com/oca/teams/23907/sr@latin/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr@latin\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Kreirao" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Kreiran" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Opis" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Ime za prikaz" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Zadnja izmjena" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Zadnja izmjena" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Zadnja izmjena" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/sv.po b/auth_brute_force/i18n/sv.po new file mode 100644 index 000000000..397e52509 --- /dev/null +++ b/auth_brute_force/i18n/sv.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Swedish (https://www.transifex.com/oca/teams/23907/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Skapad av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Skapad den" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Beskrivning" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Visa namn" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Senast redigerad" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Senast uppdaterad av" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Senast uppdaterad" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/th.po b/auth_brute_force/i18n/th.po new file mode 100644 index 000000000..7cdca0b68 --- /dev/null +++ b/auth_brute_force/i18n/th.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Thai (https://www.transifex.com/oca/teams/23907/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "สร้างโดย" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "สร้างเมื่อ" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "รายละเอียด" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "ชื่อที่ใช้แสดง" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "รหัส" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "แก้ไขครั้งสุดท้ายเมื่อ" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "อัพเดทครั้งสุดท้ายโดย" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "อัพเดทครั้งสุดท้ายเมื่อ" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/tr.po b/auth_brute_force/i18n/tr.po new file mode 100644 index 000000000..472e2fc40 --- /dev/null +++ b/auth_brute_force/i18n/tr.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Aktif" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "Deneme Zamanı" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "Denemeler" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "Kimlik doğrulaması girişimleri" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "Doğrulama sonuçları" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "Kara Liste Zamanı" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "Kara Listede" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "Kara Listedeki Bilgisayarlar" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Oluşturuldu" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Açıklama" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Görünen İsim" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "Başarısız" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Son değişiklik" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Son güncelleyen" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Son güncellenme" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "Uzak ID" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "Başarılı" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "Başarılı" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "Denenen Kullanıcı" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "Bu uzak bilgisayar kara listeden kaldırmak için seçimi kaldır" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "Başarısız" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/tr_TR.po b/auth_brute_force/i18n/tr_TR.po new file mode 100644 index 000000000..11f22d4a9 --- /dev/null +++ b/auth_brute_force/i18n/tr_TR.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Turkish (Turkey) (https://www.transifex.com/oca/teams/23907/tr_TR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr_TR\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "Etkin" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Oluşturan" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Oluşturulma tarihi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Açıklama" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Görünen ad" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "Kimlik" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "En son güncelleme tarihi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "En son güncelleyen " + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "En son güncelleme tarihi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/uk.po b/auth_brute_force/i18n/uk.po new file mode 100644 index 000000000..d54022147 --- /dev/null +++ b/auth_brute_force/i18n/uk.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Ukrainian (https://www.transifex.com/oca/teams/23907/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Створив" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Дата створення" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Опис" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Остання модифікація" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Востаннє оновив" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Останнє оновлення" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/vi.po b/auth_brute_force/i18n/vi.po new file mode 100644 index 000000000..aa1936fcb --- /dev/null +++ b/auth_brute_force/i18n/vi.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Vietnamese (https://www.transifex.com/oca/teams/23907/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Được tạo bởi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Được tạo vào" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Miêu tả" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "Sửa lần cuối vào" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Last Updated by" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/vi_VN.po b/auth_brute_force/i18n/vi_VN.po new file mode 100644 index 000000000..e8e68e4b7 --- /dev/null +++ b/auth_brute_force/i18n/vi_VN.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Vietnamese (Viet Nam) (https://www.transifex.com/oca/teams/23907/vi_VN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi_VN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "Tạo bởi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "Tạo vào" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "Mô tả" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "Cập nhật lần cuối bởi" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "Cập nhật lần cuối vào" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/zh_CN.po b/auth_brute_force/i18n/zh_CN.po new file mode 100644 index 000000000..d6517fc10 --- /dev/null +++ b/auth_brute_force/i18n/zh_CN.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "有效" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "创建者" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "创建时间" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "说明" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "ID" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "最后修改时间" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "最后更新者" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "上次更新日期" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" diff --git a/auth_brute_force/i18n/zh_TW.po b/auth_brute_force/i18n/zh_TW.po new file mode 100644 index 000000000..a031de414 --- /dev/null +++ b/auth_brute_force/i18n/zh_TW.po @@ -0,0 +1,162 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_brute_force +# +# Translators: +# OCA Transbot , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-01 02:43+0000\n" +"PO-Revision-Date: 2017-08-01 02:43+0000\n" +"Last-Translator: OCA Transbot , 2017\n" +"Language-Team: Chinese (Taiwan) (https://www.transifex.com/oca/teams/23907/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_active +msgid "Active" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_attempt_date +msgid "Attempt Date" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_attempt_ids +msgid "Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_authentication_attempt +#: model:ir.ui.menu,name:auth_brute_force.menu_res_authentication_attempt +msgid "Authentication Attempts" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_result +msgid "Authentication Result" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_ban_date +msgid "Ban Date" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:15 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Banned" +msgstr "" + +#. module: auth_brute_force +#: model:ir.actions.act_window,name:auth_brute_force.action_res_banned_remote +#: model:ir.ui.menu,name:auth_brute_force.menu_res_banned_remote +msgid "Banned Remotes" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_uid +msgid "Created by" +msgstr "建立者" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_create_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_create_date +msgid "Created on" +msgstr "建立於" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_description +msgid "Description" +msgstr "說明" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_display_name +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:14 +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Failed" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_id +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_id +msgid "ID" +msgstr "編號" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt___last_update +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote___last_update +msgid "Last Modified on" +msgstr "最後修改:" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_uid +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_uid +msgid "Last Updated by" +msgstr "最後更新:" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_write_date +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_write_date +msgid "Last Updated on" +msgstr "最後更新於" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_remote +#: model:ir.model.fields,field_description:auth_brute_force.field_res_banned_remote_remote +msgid "Remote ID" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Successful" +msgstr "" + +#. module: auth_brute_force +#: code:addons/auth_brute_force/models/res_authentication_attempt.py:13 +#: selection:res.authentication.attempt,result:0 +#, python-format +msgid "Successfull" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,field_description:auth_brute_force.field_res_authentication_attempt_login +msgid "Tried Login" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model.fields,help:auth_brute_force.field_res_banned_remote_active +msgid "Uncheck this box to unban the remote" +msgstr "" + +#. module: auth_brute_force +#: model:ir.ui.view,arch_db:auth_brute_force.view_res_authentication_attempt_search +msgid "Without Success" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_authentication_attempt +msgid "res.authentication.attempt" +msgstr "" + +#. module: auth_brute_force +#: model:ir.model,name:auth_brute_force.model_res_banned_remote +msgid "res.banned.remote" +msgstr "" From 95ff8c859434069afdb0f114524b680b689120b0 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Fri, 18 May 2018 13:42:51 +0100 Subject: [PATCH 4/7] [REF] auth_brute_force: Cover all auth entrypoints (#1219) To fix https://github.com/OCA/server-tools/issues/1125 I needed to refactor the addon. To whitelist IPs now you use a config parameter, which renders res.banned.remote model unneeded. The fix is affected by https://github.com/odoo/odoo/issues/24183 and will not work until it gets fixed upstream due to the technical limitations implied. --- auth_brute_force/README.rst | 53 +-- auth_brute_force/__init__.py | 3 +- auth_brute_force/__manifest__.py | 15 +- auth_brute_force/controllers/__init__.py | 3 - auth_brute_force/controllers/main.py | 76 ---- auth_brute_force/data/ir_config_parameter.xml | 15 - .../migrations/10.0.2.0.0/pre-migrate.py | 50 +++ auth_brute_force/models/__init__.py | 2 +- .../models/res_authentication_attempt.py | 182 +++++++-- auth_brute_force/models/res_banned_remote.py | 45 --- auth_brute_force/models/res_users.py | 155 ++++++++ auth_brute_force/security/ir_model_access.yml | 14 - .../description/screenshot_custom_ban.png | Bin 31984 -> 0 bytes auth_brute_force/tests/__init__.py | 3 + auth_brute_force/tests/test_brute_force.py | 361 ++++++++++++++++++ auth_brute_force/views/action.xml | 7 - auth_brute_force/views/menu.xml | 6 +- auth_brute_force/views/view.xml | 136 ++++--- 18 files changed, 834 insertions(+), 292 deletions(-) delete mode 100644 auth_brute_force/controllers/__init__.py delete mode 100644 auth_brute_force/controllers/main.py delete mode 100644 auth_brute_force/data/ir_config_parameter.xml create mode 100644 auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py delete mode 100644 auth_brute_force/models/res_banned_remote.py create mode 100644 auth_brute_force/models/res_users.py delete mode 100644 auth_brute_force/static/description/screenshot_custom_ban.png create mode 100644 auth_brute_force/tests/__init__.py create mode 100644 auth_brute_force/tests/test_brute_force.py diff --git a/auth_brute_force/README.rst b/auth_brute_force/README.rst index 2ad67486a..35dd52da0 100644 --- a/auth_brute_force/README.rst +++ b/auth_brute_force/README.rst @@ -22,9 +22,18 @@ extra information about remote IP. Configuration ============= -Once installed, you can change the ir.config_parameter value for the key -'auth_brute_force.max_attempt_qty' (10 by default) that define the max number -of attempts allowed before the user was banned. +You can use these configuration parameters that control this addon behavior: + +* ``auth_brute_force.whitelist_remotes`` is a comma-separated list of + whitelisted IPs. Failures from these remotes are ignored. + +* ``auth_brute_force.max_by_ip`` defaults to 50, and indicates the maximum + successive failures allowed for an IP. After hitting the limit, the IP gets + banned. + +* ``auth_brute_force.max_by_ip_user`` defaults to 10, and indicates the + maximum successive failures allowed for any IP and user combination. + After hitting the limit, that user and IP combination is banned. Usage ===== @@ -34,17 +43,14 @@ Admin user have the possibility to unblock a banned IP. Logging ------- -This module generates some WARNING logs, in the three following cases: +This module generates some WARNING logs, in the following cases: -* Authentication failed from remote '127.0.0.1'. Login tried : 'admin'. - Attempt 1 / 10. +* When the IP limit is reached: *Authentication failed from remote 'x.x.x.x'. + The remote has been banned. Login tried: xxxx.* -* Authentication failed from remote '127.0.0.1'. The remote has been banned. - Login tried : 'admin'. - -* Authentication tried from remote '127.0.0.1'. The request has been ignored - because the remote has been banned after 10 attempts without success. Login - tried : 'admin'. +* When the IP+user combination limit is reached: + *Authentication failed from remote 'x.x.x.x'. + The remote and login combination has been banned. Login tried: xxxx.* Screenshot ---------- @@ -53,13 +59,9 @@ Screenshot .. image:: /auth_brute_force/static/description/screenshot_attempts_list.png -**Detail of a banned IP** - -.. image:: /auth_brute_force/static/description/screenshot_custom_ban.png - .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas -:alt: Try me on Runbot + :alt: Try me on Runbot :target: https://runbot.odoo-community.org/runbot/149/10.0 For further information, please visit: @@ -69,14 +71,18 @@ For further information, please visit: Known issues / Roadmap ====================== -* The ID used to identify a remote request is the IP provided in the request - (key 'REMOTE_ADDR'). +* Remove 🐒 patch for https://github.com/odoo/odoo/issues/24183 in v12. + * Depending of server and / or user network configuration, the idenfication of the user can be wrong, and mainly in the following cases: -* If the Odoo server is behind an Apache / NGinx proxy without redirection, - all the request will be have the value '127.0.0.1' for the REMOTE_ADDR key; -* If some users are behind the same Internet Service Provider, if a user is - banned, all the other users will be banned too; + + * If the Odoo server is behind an Apache / NGinx proxy and it is not properly + configured, all requests will use the same IP address. Blocking such IP + could render Odoo unusable for all users! **Make sure your logs output the + correct IP for werkzeug traffic before installing this addon.** + +* The IP metadata retrieval should use a better system. `See details here + `_. Bug Tracker =========== @@ -94,6 +100,7 @@ Contributors * Sylvain LE GAL (https://twitter.com/legalsylvain) * David Vidal +* Jairo Llopis Maintainer ---------- diff --git a/auth_brute_force/__init__.py b/auth_brute_force/__init__.py index 1f9880145..cde864bae 100644 --- a/auth_brute_force/__init__.py +++ b/auth_brute_force/__init__.py @@ -1,4 +1,3 @@ -# -*- encoding: utf-8 -*- +# -*- coding: utf-8 -*- from . import models -from . import controllers diff --git a/auth_brute_force/__manifest__.py b/auth_brute_force/__manifest__.py index 1af88faed..628385fe2 100644 --- a/auth_brute_force/__manifest__.py +++ b/auth_brute_force/__manifest__.py @@ -3,22 +3,21 @@ # Copyright 2017 Tecnativa - David Vidal # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { - 'name': 'Authentification - Brute-force Attack', - 'version': '10.0.1.0.0', + 'name': 'Authentification - Brute-Force Filter', + 'version': '10.0.2.0.0', 'category': 'Tools', - 'summary': "Tracks Authentication Attempts and Prevents Brute-force" - " Attacks module", + 'summary': "Track Authentication Attempts and Prevent Brute-force Attacks", 'author': "GRAP, " "Tecnativa, " "Odoo Community Association (OCA)", - 'website': 'http://www.grap.coop', + 'website': 'https://github.com/OCA/server-tools', 'license': 'AGPL-3', 'depends': [ - 'web', - ], + # If we don't depend on it, it would inhibit this addon + "auth_crypt", + ], 'data': [ 'security/ir_model_access.yml', - 'data/ir_config_parameter.xml', 'views/view.xml', 'views/action.xml', 'views/menu.xml', diff --git a/auth_brute_force/controllers/__init__.py b/auth_brute_force/controllers/__init__.py deleted file mode 100644 index 65a8c1201..000000000 --- a/auth_brute_force/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -# -*- coding: utf-8 -*- - -from . import main diff --git a/auth_brute_force/controllers/main.py b/auth_brute_force/controllers/main.py deleted file mode 100644 index 222a62bdb..000000000 --- a/auth_brute_force/controllers/main.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2015 GRAP - Sylvain LE GAL -# Copyright 2017 Tecnativa - David Vidal -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -import logging - -from odoo import fields, http, registry, SUPERUSER_ID -from odoo.api import Environment -from odoo.http import request -from odoo.addons.web.controllers.main import Home, ensure_db - -_logger = logging.getLogger(__name__) - - -class LoginController(Home): - - @http.route() - def web_login(self, redirect=None, **kw): - if request.httprequest.method == 'POST': - ensure_db() - remote = request.httprequest.remote_addr - # Get registry and cursor - with registry(request.session.db).cursor() as cursor: - env = Environment(cursor, SUPERUSER_ID, {}) - config_obj = env['ir.config_parameter'] - attempt_obj = env['res.authentication.attempt'] - banned_remote_obj = env['res.banned.remote'] - # Get Settings - max_attempts_qty = int(config_obj.get_param( - 'auth_brute_force.max_attempt_qty')) - # Test if remote user is banned - banned = banned_remote_obj.search([('remote', '=', remote)]) - if banned: - request.params['password'] = '' - _logger.warning( - "Authentication tried from remote '%s'. The request " - "has been ignored because the remote has been banned " - "after %d attempts without success. Login tried : '%s'" - "." % (remote, max_attempts_qty, - request.params['login'])) - else: - # Try to authenticate - result = request.session.authenticate( - request.session.db, request.params['login'], - request.params['password']) - # Log attempt - attempt_obj.create({ - 'attempt_date': fields.Datetime.now(), - 'login': request.params['login'], - 'remote': remote, - 'result': banned and 'banned' or ( - result and 'successfull' or 'failed'), - }) - cursor.commit() - if not banned and not result: - # Get last bad attempts quantity - attempts_qty = len(attempt_obj.search_last_failed(remote)) - if max_attempts_qty <= attempts_qty: - # We ban the remote - _logger.warning( - "Authentication failed from remote '%s'. " - "The remote has been banned. Login tried : '%s'" - "." % (remote, request.params['login'])) - banned_remote_obj.sudo().create({ - 'remote': remote, - 'ban_date': fields.Datetime.now(), - }) - cursor.commit() - else: - _logger.warning( - "Authentication failed from remote '%s'." - " Login tried : '%s'. Attempt %d / %d." % ( - remote, request.params['login'], attempts_qty, - max_attempts_qty)) - return super(LoginController, self).web_login(redirect=redirect, **kw) diff --git a/auth_brute_force/data/ir_config_parameter.xml b/auth_brute_force/data/ir_config_parameter.xml deleted file mode 100644 index 4fe744f32..000000000 --- a/auth_brute_force/data/ir_config_parameter.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - auth_brute_force.max_attempt_qty - 10 - - - - - diff --git a/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py b/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py new file mode 100644 index 000000000..fc497cc60 --- /dev/null +++ b/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +# Copyright 2018 Tecnativa - Jairo Llopis +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from psycopg2 import IntegrityError + + +def migrate(cr, version): + # Fix typo across DB + cr.execute( + """ UPDATE res_authentication_attempt + SET result = 'successful' + WHERE result = 'successfull'""", + ) + # Store whitelist IPs in new format + cr.execute( + """ SELECT remote + FROM res_banned_remote + WHERE active IS FALSE""", + ) + remotes = {record[0] for record in cr.fetchall()} + try: + with cr.savepoint(): + cr.execute( + "INSERT INTO ir_config_parameter (key, value) VALUES (%s, %s)", + ( + "auth_brute_force.whitelist_remotes", + ",".join(remotes), + ), + ) + except IntegrityError: + # Parameter already exists + cr.execute( + "SELECT value FROM ir_config_parameter WHERE key = %s", + ("auth_brute_force.whitelist_remotes",) + ) + current = set(cr.fetchall()[0][0].split(",")) + cr.execute( + "UPDATE ir_config_parameter SET value = %s WHERE key = %s", + (",".join(current | remotes), + "auth_brute_force.whitelist_remotes"), + ) + # Update the configured IP limit parameter + cr.execute( + "UPDATE ir_config_parameter SET key = %s WHERE key = %s", + ( + "auth_brute_force.whitelist_remotes", + "auth_brute_force.max_by_ip", + ) + ) diff --git a/auth_brute_force/models/__init__.py b/auth_brute_force/models/__init__.py index f5bb7766e..75bc8dd03 100644 --- a/auth_brute_force/models/__init__.py +++ b/auth_brute_force/models/__init__.py @@ -1,4 +1,4 @@ # -*- encoding: utf-8 -*- -from . import res_banned_remote from . import res_authentication_attempt +from . import res_users diff --git a/auth_brute_force/models/res_authentication_attempt.py b/auth_brute_force/models/res_authentication_attempt.py index a75542816..ca5060f0e 100644 --- a/auth_brute_force/models/res_authentication_attempt.py +++ b/auth_brute_force/models/res_authentication_attempt.py @@ -2,35 +2,171 @@ # Copyright 2015 GRAP - Sylvain LE GAL # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, api, fields, models +import json +import logging +from urllib2 import urlopen +from odoo import api, fields, models + +GEOLOCALISATION_URL = u"http://ip-api.com/json/{}" + +_logger = logging.getLogger(__name__) class ResAuthenticationAttempt(models.Model): _name = 'res.authentication.attempt' - _order = 'attempt_date desc' - - _ATTEMPT_RESULT = [ - ('successfull', _('Successfull')), - ('failed', _('Failed')), - ('banned', _('Banned')), - ] - - # Column Section - attempt_date = fields.Datetime(string='Attempt Date') - login = fields.Char(string='Tried Login') - remote = fields.Char(string='Remote ID') + _order = 'create_date desc' + + login = fields.Char(string='Tried Login', index=True) + remote = fields.Char(string='Remote IP', index=True) result = fields.Selection( - selection=_ATTEMPT_RESULT, string='Authentication Result') + string='Authentication Result', + selection=[ + ('successful', 'Successful'), + ('failed', 'Failed'), + ('banned', 'Banned'), + ], + index=True, + ) + remote_metadata = fields.Text( + string="Remote IP metadata", + compute='_compute_metadata', + store=True, + help="Metadata publicly available for remote IP", + ) + whitelisted = fields.Boolean( + compute="_compute_whitelisted", + ) + + @api.multi + @api.depends('remote') + def _compute_metadata(self): + for item in self: + url = GEOLOCALISATION_URL.format(item.remote) + try: + res = json.loads(urlopen(url, timeout=5).read()) + except Exception: + _logger.warning( + "Couldn't fetch details from %s", + url, + exc_info=True, + ) + else: + item.remote_metadata = "\n".join( + '%s: %s' % pair for pair in res.items()) + + @api.multi + def _compute_whitelisted(self): + whitelist = self._whitelist_remotes() + for one in self: + one.whitelisted = one.remote in whitelist - # Custom Section @api.model - def search_last_failed(self, remote): + def _hits_limit(self, limit, remote, login=None): + """Know if a given remote hits a given limit. + + :param int limit: + The maximum amount of failures allowed. + + :param str remote: + The remote IP to search for. + + :param str login: + If you want to check the IP+login combination limit, supply the + login. + """ + domain = [ + ("remote", "=", remote), + ] + if login is not None: + domain += [("login", "=", login)] + # Find last successful login last_ok = self.search( - [('result', '=', 'successfull'), ('remote', '=', remote)], - order='attempt_date desc', limit=1) + domain + [("result", "=", "successful")], + order='create_date desc', + limit=1, + ) if last_ok: - return self.search([ - ('remote', '=', remote), - ('attempt_date', '>', last_ok.attempt_date)]) - else: - return self.search([('remote', '=', remote)]) + domain += [("create_date", ">", last_ok.create_date)] + # Count failures since last success, if any + recent_failures = self.search_count( + domain + [("result", "!=", "successful")], + ) + # Did we hit the limit? + return recent_failures >= limit + + @api.model + def _trusted(self, remote, login): + """Checks if any the remote or remote+login are trusted. + + :param str remote: + Remote IP from which the login attempt is taking place. + + :param str login: + User login that is being tried. + + :return bool: + ``True`` means it is trusted. ``False`` means that it is banned. + """ + # Cannot ban without remote + if not remote: + return True + get_param = self.env["ir.config_parameter"].sudo().get_param + # Whitelisted remotes always pass + if remote in self._whitelist_remotes(): + return True + # Check if remote is banned + limit = int(get_param("auth_brute_force.max_by_ip", 50)) + if self._hits_limit(limit, remote): + _logger.warning( + "Authentication failed from remote '%s'. " + "The remote has been banned. " + "Login tried: %r.", + remote, + login, + ) + return False + # Check if remote + login combination is banned + limit = int(get_param("auth_brute_force.max_by_ip_user", 10)) + if self._hits_limit(limit, remote, login): + _logger.warning( + "Authentication failed from remote '%s'. " + "The remote and login combination has been banned. " + "Login tried: %r.", + remote, + login, + ) + return False + # If you get here, you are a good boy (for now) + return True + + def _whitelist_remotes(self): + """Get whitelisted remotes. + + :return set: + Remote IPs that are whitelisted currently. + """ + whitelist = self.env["ir.config_parameter"].sudo().get_param( + "auth_brute_force.whitelist_remotes", + "", + ) + return set(whitelist.split(",")) + + @api.multi + def action_whitelist_add(self): + """Add current remotes to whitelist.""" + whitelist = self._whitelist_remotes() + whitelist |= set(self.mapped("remote")) + self.env["ir.config_parameter"].set_param( + "auth_brute_force.whitelist_remotes", + ",".join(whitelist), + ) + + @api.multi + def action_whitelist_remove(self): + """Remove current remotes from whitelist.""" + whitelist = self._whitelist_remotes() + whitelist -= set(self.mapped("remote")) + self.env["ir.config_parameter"].set_param( + "auth_brute_force.whitelist_remotes", + ",".join(whitelist), + ) diff --git a/auth_brute_force/models/res_banned_remote.py b/auth_brute_force/models/res_banned_remote.py deleted file mode 100644 index a10caad47..000000000 --- a/auth_brute_force/models/res_banned_remote.py +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2015 GRAP - Sylvain LE GAL -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -import urllib -import json - -from odoo import api, fields, models - - -class ResBannedRemote(models.Model): - _name = 'res.banned.remote' - _rec_name = 'remote' - - _GEOLOCALISATION_URL = "http://ip-api.com/json/{}" - - # Column Section - description = fields.Text( - string='Description', compute='_compute_description', store=True) - ban_date = fields.Datetime( - string='Ban Date', required=True, default=fields.Datetime.now) - remote = fields.Char(string='Remote ID', required=True) - active = fields.Boolean( - string='Active', help="Uncheck this box to unban the remote", - default=True) - attempt_ids = fields.Many2many( - comodel_name='res.authentication.attempt', string='Attempts', - compute='_compute_attempt_ids') - - # Compute Section - @api.multi - @api.depends('remote') - def _compute_description(self): - for item in self: - url = self._GEOLOCALISATION_URL.format(item.remote) - res = json.loads(urllib.urlopen(url).read()) - item.description = '' - for k, v in res.iteritems(): - item.description += '%s : %s\n' % (k, v) - - @api.multi - def _compute_attempt_ids(self): - for item in self: - attempt_obj = self.env['res.authentication.attempt'] - item.attempt_ids = attempt_obj.search_last_failed(item.remote) diff --git a/auth_brute_force/models/res_users.py b/auth_brute_force/models/res_users.py new file mode 100644 index 000000000..bf9ba88f9 --- /dev/null +++ b/auth_brute_force/models/res_users.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Tecnativa - Jairo Llopis +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +import logging +from contextlib import contextmanager +from threading import current_thread +from odoo import api, models, SUPERUSER_ID +from odoo.exceptions import AccessDenied +from odoo.service import wsgi_server + +_logger = logging.getLogger(__name__) + + +class ResUsers(models.Model): + _inherit = "res.users" + + # HACK https://github.com/odoo/odoo/issues/24183 + # TODO Remove in v12, and use normal odoo.http.request to get details + @api.model_cr + def _register_hook(self): + """🐒-patch XML-RPC controller to know remote address.""" + original_fn = wsgi_server.application_unproxied + + def _patch(environ, start_response): + current_thread().environ = environ + return original_fn(environ, start_response) + + wsgi_server.application_unproxied = _patch + + # Helpers to track authentication attempts + @classmethod + @contextmanager + def _auth_attempt(cls, login): + """Start an authentication attempt and track its state.""" + try: + # Check if this call is nested + attempt_id = current_thread().auth_attempt_id + except AttributeError: + # Not nested; create a new attempt + attempt_id = cls._auth_attempt_new(login) + if not attempt_id: + # No attempt was created, so there's nothing to do here + yield + return + try: + current_thread().auth_attempt_id = attempt_id + result = "successful" + try: + yield + except AccessDenied as error: + result = getattr(error, "reason", "failed") + raise + finally: + cls._auth_attempt_update({"result": result}) + finally: + try: + del current_thread().auth_attempt_id + except AttributeError: + pass # It was deleted already + + @classmethod + def _auth_attempt_force_raise(cls, login, method): + """Force a method to raise an AccessDenied on falsey return.""" + try: + with cls._auth_attempt(login): + result = method() + if not result: + # Force exception to record auth failure + raise AccessDenied() + except AccessDenied: + pass # `_auth_attempt()` did the hard part already + return result + + @classmethod + def _auth_attempt_new(cls, login): + """Store one authentication attempt, not knowing the result.""" + # Get the right remote address + try: + remote_addr = current_thread().environ["REMOTE_ADDR"] + except (KeyError, AttributeError): + remote_addr = False + # Exit if it doesn't make sense to store this attempt + if not remote_addr: + return False + # Use a separate cursor to keep changes always + with cls.pool.cursor() as cr: + env = api.Environment(cr, SUPERUSER_ID, {}) + attempt = env["res.authentication.attempt"].create({ + "login": login, + "remote": remote_addr, + }) + return attempt.id + + @classmethod + def _auth_attempt_update(cls, values): + """Update a given auth attempt if we still ignore its result.""" + auth_id = getattr(current_thread(), "auth_attempt_id", False) + if not auth_id: + return {} # No running auth attempt; nothing to do + # Use a separate cursor to keep changes always + with cls.pool.cursor() as cr: + env = api.Environment(cr, SUPERUSER_ID, {}) + attempt = env["res.authentication.attempt"].browse(auth_id) + # Update only on 1st call + if not attempt.result: + attempt.write(values) + return attempt.copy_data()[0] if attempt else {} + + # Override all auth-related core methods + @classmethod + def _login(cls, db, login, password): + return cls._auth_attempt_force_raise( + login, + lambda: super(ResUsers, cls)._login(db, login, password), + ) + + @classmethod + def authenticate(cls, db, login, password, user_agent_env): + return cls._auth_attempt_force_raise( + login, + lambda: super(ResUsers, cls).authenticate( + db, login, password, user_agent_env), + ) + + @classmethod + def check(cls, db, uid, passwd): + with cls._auth_attempt(uid): + return super(ResUsers, cls).check(db, uid, passwd) + + @api.model + def check_credentials(self, password): + """This is the most important and specific auth check method. + + When we get here, it means that Odoo already checked the user exists + in this database. + + Other auth methods usually plug here. + """ + login = self.env.user.login + with self._auth_attempt(login): + # Update login, just in case we stored the UID before + attempt = self._auth_attempt_update({"login": login}) + remote = attempt.get("remote") + # Fail if the remote is banned + trusted = self.env["res.authentication.attempt"]._trusted( + remote, + login, + ) + if not trusted: + error = AccessDenied() + error.reason = "banned" + raise error + # Continue with other auth systems + return super(ResUsers, self).check_credentials(password) diff --git a/auth_brute_force/security/ir_model_access.yml b/auth_brute_force/security/ir_model_access.yml index 57919b774..5dcb53021 100644 --- a/auth_brute_force/security/ir_model_access.yml +++ b/auth_brute_force/security/ir_model_access.yml @@ -4,11 +4,6 @@ name: Authentication Attempt All Users perm_read: true -- !record {model: ir.model.access, id: access_res_banned_remote_all}: - model_id: model_res_banned_remote - name: Banned Remote All Users - perm_read: true - - !record {model: ir.model.access, id: access_res_authentication_attempt_manager}: group_id: base.group_system model_id: model_res_authentication_attempt @@ -17,12 +12,3 @@ perm_read: true perm_write: true perm_unlink: true - -- !record {model: ir.model.access, id: access_res_banned_remote_manager}: - group_id: base.group_system - model_id: model_res_banned_remote - name: Banned Remote Manager - perm_create: true - perm_read: true - perm_write: true - perm_unlink: true diff --git a/auth_brute_force/static/description/screenshot_custom_ban.png b/auth_brute_force/static/description/screenshot_custom_ban.png deleted file mode 100644 index 8607f64020e34e319ebf6e13c09922c4c3cccfc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31984 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 diff --git a/auth_brute_force/tests/__init__.py b/auth_brute_force/tests/__init__.py new file mode 100644 index 000000000..5757d0102 --- /dev/null +++ b/auth_brute_force/tests/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import test_brute_force diff --git a/auth_brute_force/tests/test_brute_force.py b/auth_brute_force/tests/test_brute_force.py new file mode 100644 index 000000000..d4a3fb712 --- /dev/null +++ b/auth_brute_force/tests/test_brute_force.py @@ -0,0 +1,361 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Tecnativa - Jairo Llopis +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from threading import current_thread +from unittest import skipUnless +from urllib import urlencode + +from mock import patch +from werkzeug.utils import redirect + +from odoo import http +from odoo.tests.common import at_install, can_import, HttpCase, post_install +from odoo.tools import mute_logger + +from ..models import res_authentication_attempt, res_users + + +GARBAGE_LOGGERS = ( + "werkzeug", + res_authentication_attempt.__name__, + res_users.__name__, +) + + +@at_install(False) +@post_install(True) +# Skip CSRF validation on tests +@patch(http.__name__ + ".WebRequest.validate_csrf", return_value=True) +# Skip specific browser forgery on redirections +@patch(http.__name__ + ".redirect_with_hash", side_effect=redirect) +# Faster tests without calls to geolocation API +@patch(res_authentication_attempt.__name__ + ".urlopen", return_value="") +class BruteForceCase(HttpCase): + def setUp(self): + super(BruteForceCase, self).setUp() + # Some tests could retain environ from last test and produce fake + # results without this patch + # HACK https://github.com/odoo/odoo/issues/24183 + # TODO Remove in v12 + try: + del current_thread().environ + except AttributeError: + pass + # Complex password to avoid conflicts with `password_security` + self.good_password = "Admin$%02584" + self.data_demo = { + "login": "demo", + "password": "Demo%&/(908409**", + } + with self.cursor() as cr: + env = self.env(cr) + env["ir.config_parameter"].set_param( + "auth_brute_force.max_by_ip_user", 3) + env["ir.config_parameter"].set_param( + "auth_brute_force.max_by_ip", 4) + # Clean attempts to be able to count in tests + env["res.authentication.attempt"].search([]).unlink() + # Make sure involved users have good passwords + env.user.password = self.good_password + env["res.users"].search([ + ("login", "=", self.data_demo["login"]), + ]).password = self.data_demo["password"] + + @skipUnless(can_import("odoo.addons.web"), "Needs web addon") + @mute_logger(*GARBAGE_LOGGERS) + def test_web_login_existing(self, *args): + """Remote is banned with real user on web login form.""" + data1 = { + "login": "admin", + "password": "1234", # Wrong + } + # Make sure user is logged out + self.url_open("/web/session/logout", timeout=30) + # Fail 3 times + for n in range(3): + response = self.url_open("/web/login", bytes(urlencode(data1)), 30) + # If you fail, you get /web/login again + self.assertTrue( + response.geturl().endswith("/web/login"), + "Unexpected URL %s" % response.geturl(), + ) + # Admin banned, demo not + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + "demo", + ), + ) + # Now I know the password, but login is rejected too + data1["password"] = self.good_password + response = self.url_open("/web/login", bytes(urlencode(data1)), 30) + self.assertTrue( + response.geturl().endswith("/web/login"), + "Unexpected URL %s" % response.geturl(), + ) + # IP has been banned, demo user cannot login + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + "demo", + ), + ) + # Attempts recorded + with self.cursor() as cr: + env = self.env(cr) + failed = env["res.authentication.attempt"].search([ + ("result", "=", "failed"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(failed), 3) + banned = env["res.authentication.attempt"].search([ + ("result", "=", "banned"), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(banned), 1) + # Unban + banned.action_whitelist_add() + # Try good login, it should work now + response = self.url_open("/web/login", bytes(urlencode(data1)), 30) + self.assertTrue(response.geturl().endswith("/web")) + + @skipUnless(can_import("odoo.addons.web"), "Needs web addon") + @mute_logger(*GARBAGE_LOGGERS) + def test_web_login_unexisting(self, *args): + """Remote is banned with fake user on web login form.""" + data1 = { + "login": "administrator", # Wrong + "password": self.good_password, + } + # Make sure user is logged out + self.url_open("/web/session/logout", timeout=30) + # Fail 3 times + for n in range(3): + response = self.url_open("/web/login", bytes(urlencode(data1)), 30) + # If you fail, you get /web/login again + self.assertTrue( + response.geturl().endswith("/web/login"), + "Unexpected URL %s" % response.geturl(), + ) + # Admin banned, demo not + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + self.data_demo["login"], + ), + ) + # Demo user can login + response = self.url_open( + "/web/login", + bytes(urlencode(self.data_demo)), + 30, + ) + # If you pass, you get /web + self.assertTrue( + response.geturl().endswith("/web"), + "Unexpected URL %s" % response.geturl(), + ) + self.url_open("/web/session/logout", timeout=30) + # Attempts recorded + with self.cursor() as cr: + env = self.env(cr) + failed = env["res.authentication.attempt"].search([ + ("result", "=", "failed"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(failed), 3) + banned = env["res.authentication.attempt"].search([ + ("result", "=", "banned"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(banned), 0) + + @mute_logger(*GARBAGE_LOGGERS) + def test_xmlrpc_login_existing(self, *args): + """Remote is banned with real user on XML-RPC login.""" + data1 = { + "login": "admin", + "password": "1234", # Wrong + } + # Fail 3 times + for n in range(3): + self.assertFalse(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + # Admin banned, demo not + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + "demo", + ), + ) + # Now I know the password, but login is rejected too + data1["password"] = self.good_password + self.assertFalse(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + # IP has been banned, demo user cannot login + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + "demo", + ), + ) + # Attempts recorded + with self.cursor() as cr: + env = self.env(cr) + failed = env["res.authentication.attempt"].search([ + ("result", "=", "failed"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(failed), 3) + banned = env["res.authentication.attempt"].search([ + ("result", "=", "banned"), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(banned), 1) + # Unban + banned.action_whitelist_add() + # Try good login, it should work now + self.assertTrue(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + + @mute_logger(*GARBAGE_LOGGERS) + def test_xmlrpc_login_unexisting(self, *args): + """Remote is banned with fake user on XML-RPC login.""" + data1 = { + "login": "administrator", # Wrong + "password": self.good_password, + } + # Fail 3 times + for n in range(3): + self.assertFalse(self.xmlrpc_common.authenticate( + self.env.cr.dbname, data1["login"], data1["password"], {})) + # Admin banned, demo not + with self.cursor() as cr: + env = self.env(cr) + self.assertFalse( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + self.data_demo["login"], + ), + ) + # Demo user can login + self.assertTrue(self.xmlrpc_common.authenticate( + self.env.cr.dbname, + self.data_demo["login"], + self.data_demo["password"], + {}, + )) + # Attempts recorded + with self.cursor() as cr: + env = self.env(cr) + failed = env["res.authentication.attempt"].search([ + ("result", "=", "failed"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(failed), 3) + banned = env["res.authentication.attempt"].search([ + ("result", "=", "banned"), + ("login", "=", data1["login"]), + ("remote", "=", "127.0.0.1"), + ]) + self.assertEqual(len(banned), 0) + + @mute_logger(*GARBAGE_LOGGERS) + def test_orm_login_existing(self, *args): + """No bans on ORM login with an existing user.""" + data1 = { + "login": "admin", + "password": "1234", # Wrong + } + with self.cursor() as cr: + env = self.env(cr) + # Fail 3 times + for n in range(3): + self.assertFalse( + env["res.users"].authenticate( + cr.dbname, data1["login"], data1["password"], {})) + self.assertEqual( + env["res.authentication.attempt"].search(count=True, args=[]), + 0, + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + # Now I know the password, and login works + data1["password"] = self.good_password + self.assertTrue( + env["res.users"].authenticate( + cr.dbname, data1["login"], data1["password"], {})) + + @mute_logger(*GARBAGE_LOGGERS) + def test_orm_login_unexisting(self, *args): + """No bans on ORM login with an unexisting user.""" + data1 = { + "login": "administrator", # Wrong + "password": self.good_password, + } + with self.cursor() as cr: + env = self.env(cr) + # Fail 3 times + for n in range(3): + self.assertFalse( + env["res.users"].authenticate( + cr.dbname, data1["login"], data1["password"], {})) + self.assertEqual( + env["res.authentication.attempt"].search(count=True, args=[]), + 0, + ) + self.assertTrue( + env["res.authentication.attempt"]._trusted( + "127.0.0.1", + data1["login"], + ), + ) + # Now I know the user, and login works + data1["login"] = "admin" + self.assertTrue( + env["res.users"].authenticate( + cr.dbname, data1["login"], data1["password"], {})) diff --git a/auth_brute_force/views/action.xml b/auth_brute_force/views/action.xml index ea7ac4862..de0684c99 100644 --- a/auth_brute_force/views/action.xml +++ b/auth_brute_force/views/action.xml @@ -11,11 +11,4 @@ {"search_default_filter_no_success":1} - - Banned Remotes - res.banned.remote - form - tree,form - - diff --git a/auth_brute_force/views/menu.xml b/auth_brute_force/views/menu.xml index cd246ae33..107d69d39 100644 --- a/auth_brute_force/views/menu.xml +++ b/auth_brute_force/views/menu.xml @@ -3,12 +3,8 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> - - - diff --git a/auth_brute_force/views/view.xml b/auth_brute_force/views/view.xml index 4865978d7..bd534f3f2 100644 --- a/auth_brute_force/views/view.xml +++ b/auth_brute_force/views/view.xml @@ -3,78 +3,74 @@ License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). --> - - - res.authentication.attempt - - - - - - - - - + + + res.authentication.attempt + + + + + + + + + - - res.authentication.attempt - - - - - - - + + res.authentication.attempt + +
+
+
+ + + + + + + + + +
+
+
- - res.authentication.attempt - - - - - - - - - - + + res.authentication.attempt + + + + + + + - - - res.banned.remote - - - - - - - - - - - res.banned.remote - -
- - - - - - - - - -
-
-
- - - res.banned.remote - - - - - - + + res.authentication.attempt + + + + + + + + + +
From a54882bf07910085677c9e9dcb073174a74e09e8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Mon, 21 May 2018 11:19:35 +0100 Subject: [PATCH 5/7] [FIX] auth_brute_force: Small typos - The `whitelisted` field needs to exist in view to be usable. - The correct class is `decoration-danger` for tree views. --- auth_brute_force/__manifest__.py | 2 +- auth_brute_force/views/view.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/auth_brute_force/__manifest__.py b/auth_brute_force/__manifest__.py index 628385fe2..9aa33dfae 100644 --- a/auth_brute_force/__manifest__.py +++ b/auth_brute_force/__manifest__.py @@ -4,7 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Authentification - Brute-Force Filter', - 'version': '10.0.2.0.0', + 'version': '10.0.2.1.0', 'category': 'Tools', 'summary': "Track Authentication Attempts and Prevent Brute-force Attacks", 'author': "GRAP, " diff --git a/auth_brute_force/views/view.xml b/auth_brute_force/views/view.xml index bd534f3f2..0d8da2117 100644 --- a/auth_brute_force/views/view.xml +++ b/auth_brute_force/views/view.xml @@ -9,7 +9,7 @@ @@ -44,6 +44,7 @@ + From 6ad9be7acc709bd21f8331df7cecba8bfe997cef Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Tue, 22 May 2018 12:05:43 +0100 Subject: [PATCH 6/7] [FIX] auth_brute_force: Fix addon requirement computation (#1251) Include HACK for https://github.com/odoo/odoo/pull/24833, which explains the false positive problem we were having here: an addon being importable doesn't mean it is installed. --- auth_brute_force/__manifest__.py | 2 +- auth_brute_force/tests/test_brute_force.py | 40 +++++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/auth_brute_force/__manifest__.py b/auth_brute_force/__manifest__.py index 9aa33dfae..3ba4dca03 100644 --- a/auth_brute_force/__manifest__.py +++ b/auth_brute_force/__manifest__.py @@ -4,7 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Authentification - Brute-Force Filter', - 'version': '10.0.2.1.0', + 'version': '10.0.2.1.1', 'category': 'Tools', 'summary': "Track Authentication Attempts and Prevent Brute-force Attacks", 'author': "GRAP, " diff --git a/auth_brute_force/tests/test_brute_force.py b/auth_brute_force/tests/test_brute_force.py index d4a3fb712..2e21b534d 100644 --- a/auth_brute_force/tests/test_brute_force.py +++ b/auth_brute_force/tests/test_brute_force.py @@ -3,14 +3,14 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). from threading import current_thread -from unittest import skipUnless from urllib import urlencode +from decorator import decorator from mock import patch from werkzeug.utils import redirect from odoo import http -from odoo.tests.common import at_install, can_import, HttpCase, post_install +from odoo.tests.common import at_install, HttpCase, post_install from odoo.tools import mute_logger from ..models import res_authentication_attempt, res_users @@ -23,6 +23,29 @@ GARBAGE_LOGGERS = ( ) +# HACK https://github.com/odoo/odoo/pull/24833 +def skip_unless_addons_installed(*addons): + """Decorator to skip a test unless some addons are installed. + + :param *str addons: + Addon names that should be installed. + + :param reason: + Explain why you must skip this test. + """ + + @decorator + def _wrapper(method, self, *args, **kwargs): + installed = self.addons_installed(*addons) + if not installed: + missing = set(addons) - installed + self.skipTest("Required addons not installed: %s" % + ",".join(sorted(missing))) + return method(self, *args, **kwargs) + + return _wrapper + + @at_install(False) @post_install(True) # Skip CSRF validation on tests @@ -62,7 +85,16 @@ class BruteForceCase(HttpCase): ("login", "=", self.data_demo["login"]), ]).password = self.data_demo["password"] - @skipUnless(can_import("odoo.addons.web"), "Needs web addon") + # HACK https://github.com/odoo/odoo/pull/24833 + def addons_installed(self, *addons): + """Know if the specified addons are installed.""" + found = self.env["ir.module.module"].search([ + ("name", "in", addons), + ("state", "not in", ["uninstalled", "uninstallable"]), + ]) + return set(addons) - set(found.mapped("name")) + + @skip_unless_addons_installed("web") @mute_logger(*GARBAGE_LOGGERS) def test_web_login_existing(self, *args): """Remote is banned with real user on web login form.""" @@ -131,7 +163,7 @@ class BruteForceCase(HttpCase): response = self.url_open("/web/login", bytes(urlencode(data1)), 30) self.assertTrue(response.geturl().endswith("/web")) - @skipUnless(can_import("odoo.addons.web"), "Needs web addon") + @skip_unless_addons_installed("web") @mute_logger(*GARBAGE_LOGGERS) def test_web_login_unexisting(self, *args): """Remote is banned with fake user on web login form.""" From 883a21fc11c40dddfe4856eefff5f80185d33ca8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Thu, 24 May 2018 09:19:05 +0100 Subject: [PATCH 7/7] [MIG] auth_brute_force: Backport from v10 Odoo v9 auth methods usually violate both old and new api; they just only work in old api, so I had to adapt some tests to use it instead. Normal backport outside of that. --- auth_brute_force/README.rst | 2 +- .../{__manifest__.py => __openerp__.py} | 2 +- .../migrations/10.0.2.0.0/pre-migrate.py | 50 ------------------- .../models/res_authentication_attempt.py | 2 +- auth_brute_force/models/res_users.py | 30 +++++------ auth_brute_force/tests/test_brute_force.py | 17 ++++--- 6 files changed, 26 insertions(+), 77 deletions(-) rename auth_brute_force/{__manifest__.py => __openerp__.py} (96%) delete mode 100644 auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py diff --git a/auth_brute_force/README.rst b/auth_brute_force/README.rst index 35dd52da0..8c92334ae 100644 --- a/auth_brute_force/README.rst +++ b/auth_brute_force/README.rst @@ -62,7 +62,7 @@ Screenshot .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/149/10.0 + :target: https://runbot.odoo-community.org/runbot/149/9.0 For further information, please visit: diff --git a/auth_brute_force/__manifest__.py b/auth_brute_force/__openerp__.py similarity index 96% rename from auth_brute_force/__manifest__.py rename to auth_brute_force/__openerp__.py index 3ba4dca03..ac1a0cea7 100644 --- a/auth_brute_force/__manifest__.py +++ b/auth_brute_force/__openerp__.py @@ -4,7 +4,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). { 'name': 'Authentification - Brute-Force Filter', - 'version': '10.0.2.1.1', + 'version': '9.0.1.0.0', 'category': 'Tools', 'summary': "Track Authentication Attempts and Prevent Brute-force Attacks", 'author': "GRAP, " diff --git a/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py b/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py deleted file mode 100644 index fc497cc60..000000000 --- a/auth_brute_force/migrations/10.0.2.0.0/pre-migrate.py +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright 2018 Tecnativa - Jairo Llopis -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from psycopg2 import IntegrityError - - -def migrate(cr, version): - # Fix typo across DB - cr.execute( - """ UPDATE res_authentication_attempt - SET result = 'successful' - WHERE result = 'successfull'""", - ) - # Store whitelist IPs in new format - cr.execute( - """ SELECT remote - FROM res_banned_remote - WHERE active IS FALSE""", - ) - remotes = {record[0] for record in cr.fetchall()} - try: - with cr.savepoint(): - cr.execute( - "INSERT INTO ir_config_parameter (key, value) VALUES (%s, %s)", - ( - "auth_brute_force.whitelist_remotes", - ",".join(remotes), - ), - ) - except IntegrityError: - # Parameter already exists - cr.execute( - "SELECT value FROM ir_config_parameter WHERE key = %s", - ("auth_brute_force.whitelist_remotes",) - ) - current = set(cr.fetchall()[0][0].split(",")) - cr.execute( - "UPDATE ir_config_parameter SET value = %s WHERE key = %s", - (",".join(current | remotes), - "auth_brute_force.whitelist_remotes"), - ) - # Update the configured IP limit parameter - cr.execute( - "UPDATE ir_config_parameter SET key = %s WHERE key = %s", - ( - "auth_brute_force.whitelist_remotes", - "auth_brute_force.max_by_ip", - ) - ) diff --git a/auth_brute_force/models/res_authentication_attempt.py b/auth_brute_force/models/res_authentication_attempt.py index ca5060f0e..de19ae66e 100644 --- a/auth_brute_force/models/res_authentication_attempt.py +++ b/auth_brute_force/models/res_authentication_attempt.py @@ -5,7 +5,7 @@ import json import logging from urllib2 import urlopen -from odoo import api, fields, models +from openerp import api, fields, models GEOLOCALISATION_URL = u"http://ip-api.com/json/{}" diff --git a/auth_brute_force/models/res_users.py b/auth_brute_force/models/res_users.py index bf9ba88f9..870a83146 100644 --- a/auth_brute_force/models/res_users.py +++ b/auth_brute_force/models/res_users.py @@ -5,9 +5,9 @@ import logging from contextlib import contextmanager from threading import current_thread -from odoo import api, models, SUPERUSER_ID -from odoo.exceptions import AccessDenied -from odoo.service import wsgi_server +from openerp import api, models, SUPERUSER_ID +from openerp.exceptions import AccessDenied +from openerp.service import wsgi_server _logger = logging.getLogger(__name__) @@ -17,8 +17,7 @@ class ResUsers(models.Model): # HACK https://github.com/odoo/odoo/issues/24183 # TODO Remove in v12, and use normal odoo.http.request to get details - @api.model_cr - def _register_hook(self): + def _register_hook(self, cr): """🐒-patch XML-RPC controller to know remote address.""" original_fn = wsgi_server.application_unproxied @@ -108,25 +107,22 @@ class ResUsers(models.Model): return attempt.copy_data()[0] if attempt else {} # Override all auth-related core methods - @classmethod - def _login(cls, db, login, password): - return cls._auth_attempt_force_raise( + def _login(self, db, login, password): + return self._auth_attempt_force_raise( login, - lambda: super(ResUsers, cls)._login(db, login, password), + lambda: super(ResUsers, self)._login(db, login, password), ) - @classmethod - def authenticate(cls, db, login, password, user_agent_env): - return cls._auth_attempt_force_raise( + def authenticate(self, db, login, password, user_agent_env): + return self._auth_attempt_force_raise( login, - lambda: super(ResUsers, cls).authenticate( + lambda: super(ResUsers, self).authenticate( db, login, password, user_agent_env), ) - @classmethod - def check(cls, db, uid, passwd): - with cls._auth_attempt(uid): - return super(ResUsers, cls).check(db, uid, passwd) + def check(self, db, uid, passwd): + with self._auth_attempt(uid): + return super(ResUsers, self).check(db, uid, passwd) @api.model def check_credentials(self, password): diff --git a/auth_brute_force/tests/test_brute_force.py b/auth_brute_force/tests/test_brute_force.py index 2e21b534d..f63a579d8 100644 --- a/auth_brute_force/tests/test_brute_force.py +++ b/auth_brute_force/tests/test_brute_force.py @@ -9,9 +9,10 @@ from decorator import decorator from mock import patch from werkzeug.utils import redirect -from odoo import http -from odoo.tests.common import at_install, HttpCase, post_install -from odoo.tools import mute_logger +from openerp import http +from openerp.tests.common import at_install, HttpCase, post_install +from openerp.tools import mute_logger +from openerp.modules.registry import RegistryManager from ..models import res_authentication_attempt, res_users @@ -341,10 +342,11 @@ class BruteForceCase(HttpCase): } with self.cursor() as cr: env = self.env(cr) + pool = RegistryManager.get(cr.dbname) # Fail 3 times for n in range(3): self.assertFalse( - env["res.users"].authenticate( + pool["res.users"].authenticate( cr.dbname, data1["login"], data1["password"], {})) self.assertEqual( env["res.authentication.attempt"].search(count=True, args=[]), @@ -359,7 +361,7 @@ class BruteForceCase(HttpCase): # Now I know the password, and login works data1["password"] = self.good_password self.assertTrue( - env["res.users"].authenticate( + pool["res.users"].authenticate( cr.dbname, data1["login"], data1["password"], {})) @mute_logger(*GARBAGE_LOGGERS) @@ -370,11 +372,12 @@ class BruteForceCase(HttpCase): "password": self.good_password, } with self.cursor() as cr: + pool = RegistryManager.get(cr.dbname) env = self.env(cr) # Fail 3 times for n in range(3): self.assertFalse( - env["res.users"].authenticate( + pool["res.users"].authenticate( cr.dbname, data1["login"], data1["password"], {})) self.assertEqual( env["res.authentication.attempt"].search(count=True, args=[]), @@ -389,5 +392,5 @@ class BruteForceCase(HttpCase): # Now I know the user, and login works data1["login"] = "admin" self.assertTrue( - env["res.users"].authenticate( + pool["res.users"].authenticate( cr.dbname, data1["login"], data1["password"], {}))