Merge branch 'master' into 381-events-afterregister-and-beforeregis

This commit is contained in:
Lorenzo Milesi
2022-08-11 09:10:53 +02:00
committed by GitHub
81 changed files with 3257 additions and 1056 deletions

79
.github/workflows/php.yml vendored Normal file
View File

@ -0,0 +1,79 @@
name: Build
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
operating-system: ['ubuntu-latest']
php-versions: ['8.1', '8.0','7.4']
services:
mariadb:
image: mariadb:latest
ports:
- 3306:3306
env:
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_DATABASE: yii2-usuario-test
MYSQL_ROOT_PASSWORD: password
options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, intl, gd
ini-values: post_max_size=256M, max_execution_time=180
coverage: xdebug
- uses: actions/checkout@v2
- name: Verify MariaDB connection
run: |
while ! mysqladmin ping -h"127.0.0.1" --silent; do
sleep 1
done
- name: Validate PHP version
run: php -v
- name: Cache Composer packages
id: composer-cache
uses: actions/cache@v2
with:
path: vendor
key: ${{ runner.os }}-php-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-
- name: Verify db connection & databases
run: mysql -e "SHOW DATABASES;" -h127.0.0.1 -uroot -ppassword
- name: Install
run: composer install --prefer-dist --no-interaction
- name: Run migrations
run: php tests/_app/yii.php migrate/up --interactive=0 --migrationPath=@yii/rbac/migrations
- name: Run tests
run: XDEBUG_MODE=coverage php vendor/bin/codecept run --coverage --coverage-xml
- name: Archive failed tests artifacts - test output & log
uses: actions/upload-artifact@v2
if: failure()
with:
name: test-outputs-php-${{ matrix.php-versions }}
path: tests/_output

View File

@ -1,65 +0,0 @@
# faster builds on new travis setup not using sudo
sudo: false
language: php
php:
- 5.6
- 7.1
- 7.2
- 7.3
- 7.4
- nightly
services:
- mysql
matrix:
fast_finish: true
allow_failures:
- php: nightly
# cache vendor dirs
# cache:
# directories:
# - vendor
# - $HOME/.composer/cache
install:
- |
if [[ $TRAVIS_PHP_VERSION != '7.1' && $TRAVIS_PHP_VERSION != '7.2' && $TRAVIS_PHP_VERSION != hhv* ]]; then
# disable xdebug for performance reasons when code coverage is not needed
# note: xdebug on hhvm is disabled by default
phpenv config-rm xdebug.ini || echo "xdebug is not installed"
fi
- travis_retry composer self-update && composer --version
- export PATH="$HOME/.composer/vendor/bin:$PATH"
- COMPOSER_MEMORY_LIMIT=-1 travis_retry composer install --prefer-dist --no-interaction
before_script:
- php -r "echo INTL_ICU_VERSION . \"\n\";"
- php -r "echo INTL_ICU_DATA_VERSION . \"\n\";"
- mysql --version
# initialize database
- mysql -e 'CREATE DATABASE `yii2-usuario-test`;';
- php tests/_app/yii.php migrate/up --interactive=0
- php tests/_app/yii.php migrate/up --interactive=0 --migrationPath=@yii/rbac/migrations
# enable code coverage on PHP 7.2, only one PHP version needs to generate coverage data
- |
if [ $TRAVIS_PHP_VERSION = '7.2' ]; then
CODECEPTION_FLAGS="--coverage-xml"
fi
script:
- composer validate --no-check-lock
- vendor/bin/codecept run $CODECEPTION_FLAGS
after_script:
- |
if [ $TRAVIS_PHP_VERSION = '7.2' ]; then
travis_retry wget https://scrutinizer-ci.com/ocular.phar
php ocular.phar code-coverage:upload --format=php-clover tests/_output/coverage.xml
fi

View File

@ -1,11 +1,27 @@
# CHANGELOG
## work in progress
## 1.6.0 work in progress
**WARNING**: this release (long time due) makes a step forward in PHP
compatibility, leaving behind obsolete versions. While yii2-usuario should
still work without issues on 5.6, from now on testing and development will
look forward and manitain only >=7.4 versions.
- Fix replace non-working travis build with working github actions build (TonisOrmisson)
- Fix user login events not triggered on ajax requests (TonisOrmisson)
- Enh: Added minimum requirements when a new password is automatically generated (MatteoF96)
- Fix #380: Avoid rewriting AccessRule::matchRole (maxxer)
- Fix #378: Add module attribute 'disableIpLogging' (jkmssoft)
- Enh #387: Added Persian translation (hadi-aj)
- Fix #384: Delete flash messages after consuming (cgsmith)
- Fix #381: Renamed events in `UserEvent` to avoid conflicts with events in `FormEvent` (Slayvin)
- Enh: Added SK translations (snickom)
- Fix: allow `password_changed_at` to be saved when reseting password (p4blojf)
- Fix #430: Moved `EVENT_BEFORE_PROFILE_UPDATE` to correct place (eluhr)
- Ehn #456: Added filter to allow forcing 2FA for specific user roles (acordeddu)
- Ehn #412: Allow role names to support UTF-8 chars (4khobta)
- Ehn #448: Remove deprecated SwiftMailer, use SymfonyMailer instead (TonisOrmisson)
- Ehn #428: Translations of the placeholders in the login widget (anapaulaxenon)
## 1.5.1 April 5, 2020
- Fix #370: Extending view fix (effsoft)

View File

@ -6,7 +6,7 @@ Yii 2 Usuario Extension
[![Packagist Version](https://img.shields.io/packagist/v/2amigos/yii2-usuario.svg?style=flat-square)](https://packagist.org/packages/2amigos/yii2-usuario)
[![Latest Stable Version](https://poser.pugx.org/2amigos/yii2-usuario/version)](https://packagist.org/packages/2amigos/yii2-usuario)
[![Total Downloads](https://poser.pugx.org/2amigos/yii2-usuario/downloads)](https://packagist.org/packages/2amigos/yii2-usuario)
[![Build Status](https://travis-ci.org/2amigos/yii2-usuario.svg?branch=master)](https://travis-ci.org/2amigos/yii2-usuario)
[![Build Status](https://github.com/2amigos/yii2-usuario/actions/workflows/php.yml/badge.svg)](https://github.com/2amigos/yii2-usuario/actions/)
[![Latest Unstable Version](https://poser.pugx.org/2amigos/yii2-usuario/v/unstable)](//packagist.org/packages/2amigos/yii2-usuario)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/2amigos/yii2-usuario/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/2amigos/yii2-usuario/?branch=master)

View File

@ -4,8 +4,8 @@ paths:
log: tests/_output
data: tests/_data
helpers: tests/_support
bootstrap: _bootstrap.php
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
modules:
@ -13,11 +13,12 @@ modules:
Db:
dsn: 'mysql:host=127.0.0.1;dbname=yii2-usuario-test'
user: 'root'
password: ''
password: 'password'
dump: tests/_data/schema.sql
Yii2:
configFile: 'tests/_app/config/test.php'
cleanup: false
transaction: false
coverage:
enabled: true
whitelist:

View File

@ -44,14 +44,17 @@
"2amigos/yii2-selectize-widget": "^1.1",
"yiisoft/yii2-authclient": "^2.1",
"yiisoft/yii2-httpclient": "^2.0",
"yiisoft/yii2-bootstrap": "^2.0",
"yiisoft/yii2-swiftmailer": "^2.0"
"yiisoft/yii2-bootstrap": "^2.0"
},
"suggest": {
"yiisoft/yii2-symfonymailer": "A mailer driver is needed to send e-mails. Older versions use abandoned Swiftmailer which can be replaced with symfonymailer",
"2amigos/2fa-library": "Needed if you want to enable 2 Factor Authentication. Require version ^1.0",
"2amigos/qrcode-library": "Needed if you want to enable 2FA with QR Code generation. Require version ^1.1"
},
"require-dev": {
"php": ">=7.4",
"yiisoft/yii2-symfonymailer": "~2.0.0",
"friendsofphp/php-cs-fixer": "^2.3",
"squizlabs/php_codesniffer": "*",
"phpmd/phpmd": "@stable",
@ -79,6 +82,9 @@
},
"fxp-asset": {
"enabled": false
},
"allow-plugins": {
"yiisoft/yii2-composer": true
}
},
"conflict": {

6
docs/events/user-events.md Normal file → Executable file
View File

@ -21,6 +21,8 @@ On Controllers
- **UserEvent::EVENT_AFTER_UNBLOCK**: Occurs after a user is being un-blocked
- **UserEvent::EVENT_BEFORE_SWITCH_IDENTITY**: Occurs before a user is being impersonated by admin
- **UserEvent::EVENT_AFTER_SWITCH_IDENTITY**: Occurs after a user his being impersonated by admin
- **SessionEvent::EVENT_BEFORE_TERMINATE_USER_SESSIONS**
- **SessionEvent::EVENT_AFTER_TERMINATE_USER_SESSIONS**
- **RegistrationController**
@ -41,6 +43,10 @@ On Controllers
- **UserEvent::EVENT_BEFORE_DELETE**: Occurs before the user account is deleted
- **UserEvent::EVENT_AFTER_DELETE**: Occurs after the user account is deleted
- **SessionController**
- **SessionEvent::EVENT_BEFORE_TERMINATE_USER_SESSIONS**: Occurs before the user sessions is terminated
- **SessionEvent::EVENT_AFTER_TERMINATE_USER_SESSIONS**: Occurs after the user sessions is terminated
On Models
---------

View File

@ -30,7 +30,7 @@ Put this in your migration:
$auth = Yii::$app->authManager;
// create a role named "administrator"
$administratorRole = $auth->createRole('administrator');
$administratorRole = $auth->createRole('admin');
$administratorRole->description = 'Administrator';
$auth->add($administratorRole);
@ -65,7 +65,7 @@ Put this in your migration:
// delete admin-user and administrator role
$administratorRole = $auth->getRole("administrator");
$user = \Da\User\Model\User::findOne(['name'=>"admin"]);
$user = \Da\User\Model\User::findOne(['username'=>"admin"]);
$auth->revoke($administratorRole, $user->id);
$user->delete();
$auth->remove($administratorRole);

View File

@ -0,0 +1,60 @@
How to enable session history
============================
Session history list user sessions.
User can delete all sessions except current.
Configure Module and Application
--------------------------------
```php
// ...
'modules' => [
'user' => [
'class' => Da\User\Module::class,
'enableSessionHistory' => true,
]
],
// ...
'components' => [
'session' => Da\User\Service\SessionHistory\SessionHistoryDecorator::class,
]
// ...
'container' => [
'singletons' => [
Da\User\Service\SessionHistory\TerminateSessionsServiceInterface::class => Da\User\Service\SessionHistory\TerminateSessionsService::class
]
]
// ...
'controllerMap' => [
'migrate' => [
...
'migrationNamespaces' => [
'Da\User\Migration\Session',
],
],
],
```
Additionally for upping migration can use
```
./yii migrate --migrationNamespaces=Da\\User\\Migration\Session
```
Setting user screenshot:
![Settings user screenshot](./session-history/settings.png)
Admin screenshot:
![Admin screenshot](./session-history/admin.png)
© [2amigos](http://www.2amigos.us/) 2013-2019

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

1
docs/index.md Normal file → Executable file
View File

@ -188,6 +188,7 @@ Helpful Guides
- [How to Switch Identities](helpful-guides/how-to-switch-identities.md)
- [Separate Frontend and Backend Sessions](helpful-guides/separate-frontend-and-backend-sessions.md)
- [Social Network Authentication](helpful-guides/social-network-authentication.md)
- [How to Enable session history](helpful-guides/how-to-use-session-history.md)
Contributing
------------

46
docs/installation/configuration-options.md Normal file → Executable file
View File

@ -3,6 +3,22 @@ Configuration Options
The module comes with a set of attributes to configure. The following is the list of all available options:
#### enableSessionHistory (Type: `boolean, integer`, Default value: `false`)
If this option is to `true`, session history will be kept, [more](../helpful-guides/how-to-use-session-history.md).
#### numberSessionHistory (Type: `boolean, integer`, Default value: `false`)
Number of expired storing records `session history`, values:
- `false` Store all records without deleting
- `integer` Count of records for storing
#### timeoutSessionHistory (Type: `boolean, integer`, Default value: `false`)
How long store `session history` after expiring, values:
- `false` Store all records without deleting
- `integer` Time for storing after expiring in seconds
#### enableTwoFactorAuthentication (type: `boolean`, default: `false`)
Setting this attribute will allow users to configure their login process with two-factor authentication.
@ -12,6 +28,24 @@ Setting this attribute will allow users to configure their login process with tw
By default, Google Authenticator App for two-factor authentication cycles in periods of 30 seconds. In order to allow
a bigger period so to avoid out of sync issues.
#### twoFactorAuthenticationForcedPermissions (type: `array`, default: `[]`)
The list of permissions for which two factor authentication is mandatory. In order to perform the check in every action you must configure a filter into your config file like this:
use Da\User\Filter\TwoFactorAuthenticationEnforceFilter;
...
'on beforeAction' => function() {
Yii::$app->controller->attachBehavior(
'enforceTwoFactorAuthentication',[
'class' => TwoFactorAuthenticationEnforceFilter::class,
'except' => ['login', 'logout', 'account', 'two-factor', 'two-factor-enable'],
]
);
},
...
This will redirect the user to their account page until the two factor authentication is enabled.
#### enableGdprCompliance (type: `boolean`, default: `false`)
Setting this attribute enables a serie of measures to comply with EU GDPR regulation, like data consent, right to be forgotten and data portability.
@ -220,5 +254,17 @@ Set to `true` to restrict user assignments to roles only.
If `true` registration and last login IPs are not logged into users table, instead a dummy 127.0.0.1 is used
#### minPasswordRequirements (type: `array`, default: `['lower' => 1, 'digit' => 1, 'upper' => 1]`)
Minimum requirements when a new password is automatically generated.
Array structure: `"requirement" => minimum_number_characters`.
Possible array keys:
- lower: minimum number of lowercase characters;
- upper: minimum number of uppercase characters;
- digit: minimum number of digits;
- special: minimum number of special characters;
- min: minimum number of characters (= minimum length).
© [2amigos](http://www.2amigos.us/) 2013-2019

8
src/User/Bootstrap.php Normal file → Executable file
View File

@ -16,7 +16,9 @@ use Da\User\Contracts\AuthManagerInterface;
use Da\User\Controller\SecurityController;
use Da\User\Event\FormEvent;
use Da\User\Helper\ClassMapHelper;
use Da\User\Model\SessionHistory;
use Da\User\Model\User;
use Da\User\Search\SessionHistorySearch;
use Yii;
use yii\authclient\Collection;
use yii\base\Application;
@ -128,7 +130,7 @@ class Bootstrap implements BootstrapInterface
$model = is_array($definition) ? $definition['class'] : $definition;
$name = substr($class, strrpos($class, '\\') + 1);
$modelClassMap[$class] = $model;
if (in_array($name, ['User', 'Profile', 'Token', 'SocialNetworkAccount'])) {
if (in_array($name, ['User', 'Profile', 'Token', 'SocialNetworkAccount', 'SessionHistory'])) {
$di->set(
"Da\\User\\Query\\{$name}Query",
function () use ($model) {
@ -315,10 +317,12 @@ class Bootstrap implements BootstrapInterface
'Assignment' => 'Da\User\Model\Assignment',
'Permission' => 'Da\User\Model\Permission',
'Role' => 'Da\User\Model\Role',
'SessionHistory' => SessionHistory::class,
// --- search
'UserSearch' => 'Da\User\Search\UserSearch',
'PermissionSearch' => 'Da\User\Search\PermissionSearch',
'RoleSearch' => 'Da\User\Search\RoleSearch',
'SessionHistorySearch' => SessionHistorySearch::class,
// --- forms
'RegistrationForm' => 'Da\User\Form\RegistrationForm',
'ResendForm' => 'Da\User\Form\ResendForm',
@ -338,11 +342,13 @@ class Bootstrap implements BootstrapInterface
'Assignment',
'Permission',
'Role',
'SessionHistory'
],
'Da\User\Search' => [
'UserSearch',
'PermissionSearch',
'RoleSearch',
'SessionHistorySearch',
],
'Da\User\Form' => [
'RegistrationForm',

41
src/User/Controller/AdminController.php Normal file → Executable file
View File

@ -17,9 +17,11 @@ use Da\User\Filter\AccessRuleFilter;
use Da\User\Model\Profile;
use Da\User\Model\User;
use Da\User\Query\UserQuery;
use Da\User\Search\SessionHistorySearch;
use Da\User\Search\UserSearch;
use Da\User\Service\PasswordExpireService;
use Da\User\Service\PasswordRecoveryService;
use Da\User\Service\SessionHistory\TerminateUserSessionsService;
use Da\User\Service\SwitchIdentityService;
use Da\User\Service\UserBlockService;
use Da\User\Service\UserConfirmationService;
@ -66,7 +68,7 @@ class AdminController extends Controller
*/
public function beforeAction($action)
{
if (in_array($action->id, ['index', 'update', 'update-profile', 'info', 'assignments'], true)) {
if (in_array($action->id, ['index', 'update', 'update-profile', 'info', 'assignments', 'session-history'], true)) {
Url::remember('', 'actions-redirect');
}
@ -88,6 +90,7 @@ class AdminController extends Controller
'switch-identity' => ['post'],
'password-reset' => ['post'],
'force-password-change' => ['post'],
'terminate-sessions' => ['post'],
],
],
'access' => [
@ -101,6 +104,11 @@ class AdminController extends Controller
'actions' => ['switch-identity'],
'roles' => ['@'],
],
[
'allow' => $this->getModule()->enableSessionHistory,
'actions' => ['session-history', 'terminate-sessions'],
'roles' => ['admin'],
],
[
'allow' => true,
'roles' => ['admin'],
@ -189,8 +197,8 @@ class AdminController extends Controller
$this->make(AjaxRequestModelValidator::class, [$profile])->validate();
if ($profile->load(Yii::$app->request->post())) {
$this->trigger(UserEvent::EVENT_BEFORE_PROFILE_UPDATE, $event);
if ($profile->save()) {
$this->trigger(UserEvent::EVENT_BEFORE_PROFILE_UPDATE, $event);
Yii::$app->getSession()->setFlash('success', Yii::t('usuario', 'Profile details have been updated'));
$this->trigger(UserEvent::EVENT_AFTER_PROFILE_UPDATE, $event);
@ -346,4 +354,33 @@ class AdminController extends Controller
}
$this->redirect(['index']);
}
/**
* Display list session history
*/
public function actionSessionHistory($id)
{
$searchModel = new SessionHistorySearch([
'user_id' => $id,
]);
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
$user = $this->userQuery->where(['id' => $id])->one();
return $this->render('_session-history', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
'user' => $user,
]);
}
/**
* Terminate all session user
*/
public function actionTerminateSessions($id)
{
$this->make(TerminateUserSessionsService::class, [$id])->run();
return $this->redirect(Url::previous('actions-redirect'));
}
}

View File

@ -1,6 +1,6 @@
<?php
/*
/**
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
@ -116,23 +116,33 @@ class SecurityController extends Controller
return $this->goHome();
}
/** @var LoginForm $form */
/**
* @var LoginForm $form
*/
$form = $this->make(LoginForm::class);
/** @var FormEvent $event */
/**
* @var FormEvent $event
*/
$event = $this->make(FormEvent::class, [$form]);
if (Yii::$app->request->isAjax && $form->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($form);
$errors = ActiveForm::validate($form);
if (empty($errors)) {
return $errors;
}
$this->trigger(FormEvent::EVENT_FAILED_LOGIN, $event);
return $errors;
}
if ($form->load(Yii::$app->request->post())) {
if ($this->module->enableTwoFactorAuthentication && $form->validate()) {
if ($form->getUser()->auth_tf_enabled) {
Yii::$app->session->set('credentials', ['login' => $form->login, 'pwd' => $form->password]);
$user = $form->getUser();
if ($user->auth_tf_enabled) {
Yii::$app->session->set('credentials', ['login' => $form->login, 'pwd' => $form->password]);
return $this->redirect(['confirm']);
}
}
@ -148,10 +158,7 @@ class SecurityController extends Controller
return $this->goBack();
}
else
{
$this->trigger(FormEvent::EVENT_FAILED_LOGIN, $event);
}
$this->trigger(FormEvent::EVENT_FAILED_LOGIN, $event);
}
return $this->render(
@ -174,13 +181,17 @@ class SecurityController extends Controller
}
$credentials = Yii::$app->session->get('credentials');
/** @var LoginForm $form */
/**
* @var LoginForm $form
*/
$form = $this->make(LoginForm::class);
$form->login = $credentials['login'];
$form->password = $credentials['pwd'];
$form->setScenario('2fa');
/** @var FormEvent $event */
/**
* @var FormEvent $event
*/
$event = $this->make(FormEvent::class, [$form]);
if (Yii::$app->request->isAjax && $form->load(Yii::$app->request->post())) {
@ -240,4 +251,5 @@ class SecurityController extends Controller
$this->make(SocialNetworkAccountConnectService::class, [$this, $client])->run();
}
}

142
src/User/Controller/SettingsController.php Normal file → Executable file
View File

@ -1,6 +1,6 @@
<?php
/*
/**
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
@ -26,7 +26,9 @@ use Da\User\Module;
use Da\User\Query\ProfileQuery;
use Da\User\Query\SocialNetworkAccountQuery;
use Da\User\Query\UserQuery;
use Da\User\Search\SessionHistorySearch;
use Da\User\Service\EmailChangeService;
use Da\User\Service\SessionHistory\TerminateUserSessionsService;
use Da\User\Service\TwoFactorQrCodeUriGeneratorService;
use Da\User\Traits\ContainerAwareTrait;
use Da\User\Traits\ModuleAwareTrait;
@ -91,7 +93,8 @@ class SettingsController extends Controller
'actions' => [
'disconnect' => ['post'],
'delete' => ['post'],
'two-factor-disable' => ['post']
'two-factor-disable' => ['post'],
'terminate-sessions' => ['post'],
],
],
'access' => [
@ -111,7 +114,7 @@ class SettingsController extends Controller
'delete',
'two-factor',
'two-factor-enable',
'two-factor-disable'
'two-factor-disable',
],
'roles' => ['@'],
],
@ -120,6 +123,11 @@ class SettingsController extends Controller
'actions' => ['confirm'],
'roles' => ['?', '@'],
],
[
'allow' => $this->getModule()->enableSessionHistory,
'actions' => ['session-history', 'terminate-sessions'],
'roles' => ['@'],
],
],
],
];
@ -138,7 +146,11 @@ class SettingsController extends Controller
$profile->link('user', Yii::$app->user->identity);
}
/** @var ProfileEvent $event */
/**
*
*
* @var ProfileEvent $event
*/
$event = $this->make(ProfileEvent::class, [$profile]);
$this->make(AjaxRequestModelValidator::class, [$profile])->validate();
@ -170,9 +182,12 @@ class SettingsController extends Controller
if (!$this->module->enableGdprCompliance) {
throw new NotFoundHttpException();
}
return $this->render('privacy', [
return $this->render(
'privacy',
[
'module' => $this->module
]);
]
);
}
/**
@ -189,7 +204,11 @@ class SettingsController extends Controller
if (!$this->module->enableGdprCompliance) {
throw new NotFoundHttpException();
}
/** @var GdprDeleteForm $form */
/**
*
*
* @var GdprDeleteForm $form
*/
$form = $this->make(GdprDeleteForm::class);
$user = $form->getUser();
@ -211,21 +230,25 @@ class SettingsController extends Controller
$security = $this->make(SecurityHelper::class);
$anonymReplacement = $this->module->gdprAnonymizePrefix . $user->id;
$user->updateAttributes([
$user->updateAttributes(
[
'email' => $anonymReplacement . "@example.com",
'username' => $anonymReplacement,
'gdpr_deleted' => 1,
'blocked_at' => time(),
'auth_key' => $security->generateRandomString()
]);
$user->profile->updateAttributes([
]
);
$user->profile->updateAttributes(
[
'public_email' => $anonymReplacement . "@example.com",
'name' => $anonymReplacement,
'gravatar_email' => $anonymReplacement . "@example.com",
'location' => $anonymReplacement,
'website' => $anonymReplacement . ".tld",
'bio' => Yii::t('usuario', 'Deleted by GDPR request')
]);
]
);
}
$this->trigger(GdprEvent::EVENT_AFTER_DELETE, $event);
@ -234,14 +257,21 @@ class SettingsController extends Controller
return $this->goHome();
}
return $this->render('gdpr-delete', [
return $this->render(
'gdpr-delete',
[
'model' => $form,
]);
]
);
}
public function actionGdprConsent()
{
/** @var User $user */
/**
*
*
* @var User $user
*/
$user = Yii::$app->user->identity;
if ($user->gdpr_consent) {
return $this->redirect(['profile']);
@ -249,30 +279,40 @@ class SettingsController extends Controller
$model = new DynamicModel(['gdpr_consent']);
$model->addRule('gdpr_consent', 'boolean');
$model->addRule('gdpr_consent', 'default', ['value' => 0, 'skipOnEmpty' => false]);
$model->addRule('gdpr_consent', 'compare', [
$model->addRule(
'gdpr_consent',
'compare',
[
'compareValue' => true,
'message' => Yii::t('usuario', 'Your consent is required to work with this site'),
'when' => function () {
return $this->module->enableGdprCompliance;
},
]);
]
);
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$user->updateAttributes([
$user->updateAttributes(
[
'gdpr_consent' => 1,
'gdpr_consent_date' => time(),
]);
]
);
return $this->redirect(['profile']);
}
return $this->render('gdpr-consent', [
return $this->render(
'gdpr-consent',
[
'model' => $model,
'gdpr_consent_hint' => $this->module->getConsentMessage(),
]);
]
);
}
/**
* Exports the data from the current user in a mechanical readable format (csv). Properties exported can be defined
* in the module configuration.
*
* @throws NotFoundHttpException if gdpr compliance is not enabled
* @throws \Exception
* @throws \Throwable
@ -317,7 +357,11 @@ class SettingsController extends Controller
public function actionAccount()
{
/** @var SettingsForm $form */
/**
*
*
* @var SettingsForm $form
*/
$form = $this->make(SettingsForm::class);
$event = $this->make(UserEvent::class, [$form->getUser()]);
@ -384,7 +428,11 @@ class SettingsController extends Controller
throw new NotFoundHttpException(Yii::t('usuario', 'Not found'));
}
/** @var User $user */
/**
*
*
* @var User $user
*/
$user = Yii::$app->user->identity;
$event = $this->make(UserEvent::class, [$user]);
Yii::$app->user->logout();
@ -400,7 +448,11 @@ class SettingsController extends Controller
public function actionTwoFactor($id)
{
/** @var User $user */
/**
*
*
* @var User $user
*/
$user = $this->userQuery->whereId($id)->one();
if (null === $user) {
@ -416,7 +468,11 @@ class SettingsController extends Controller
{
Yii::$app->response->format = Response::FORMAT_JSON;
/** @var User $user */
/**
*
*
* @var User $user
*/
$user = $this->userQuery->whereId($id)->one();
if (null === $user) {
@ -443,7 +499,11 @@ class SettingsController extends Controller
public function actionTwoFactorDisable($id)
{
/** @var User $user */
/**
*
*
* @var User $user
*/
$user = $this->userQuery->whereId($id)->one();
if (null === $user) {
@ -463,6 +523,32 @@ class SettingsController extends Controller
$this->redirect(['account']);
}
/**
* Display list session history.
*/
public function actionSessionHistory()
{
$searchModel = new SessionHistorySearch([
'user_id' => Yii::$app->user->id,
]);
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('session-history', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
}
/**
* Terminate all session user
*/
public function actionTerminateSessions()
{
$this->make(TerminateUserSessionsService::class, [Yii::$app->user->id])->run();
return $this->redirect(['session-history']);
}
/**
* @param $id
* @throws ForbiddenHttpException
@ -473,7 +559,11 @@ class SettingsController extends Controller
*/
protected function disconnectSocialNetwork($id)
{
/** @var SocialNetworkAccount $account */
/**
*
*
* @var SocialNetworkAccount $account
*/
$account = $this->socialNetworkAccountQuery->whereId($id)->one();
if ($account === null) {

37
src/User/Event/SessionEvent.php Executable file
View File

@ -0,0 +1,37 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Event;
use Da\User\Model\User;
use yii\base\Event;
/**
* @property-read User $user
*/
class SessionEvent extends Event
{
const EVENT_BEFORE_TERMINATE_USER_SESSIONS = 'beforeTerminateUserSessions';
const EVENT_AFTER_TERMINATE_USER_SESSIONS = 'afterTerminateUserSessions';
protected $user;
public function __construct(User $user, array $config = [])
{
$this->user = $user;
parent::__construct($config);
}
public function getUser()
{
return $this->user;
}
}

View File

@ -0,0 +1,50 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Filter;
use Da\User\Model\User;
use Da\User\Module;
use Yii;
use yii\base\ActionFilter;
use Da\User\Traits\AuthManagerAwareTrait;
class TwoFactorAuthenticationEnforceFilter extends ActionFilter
{
use AuthManagerAwareTrait;
public function beforeAction($action)
{
/** @var Module $module */
$module = Yii::$app->getModule('user');
$enableTwoFactorAuthentication = $module->enableTwoFactorAuthentication;
// If enableTwoFactorAuthentication is set to false do nothing
if (!$enableTwoFactorAuthentication) {
return parent::beforeAction($action);
}
if (Yii::$app->user->isGuest) {
// Not our business
return parent::beforeAction($action);
}
$permissions = $module->twoFactorAuthenticationForcedPermissions;
$itemsByUser = array_keys($this->getAuthManager()->getItemsByUser(Yii::$app->user->identity->id));
if(!empty(array_intersect($permissions, $itemsByUser))){
Yii::$app->session->setFlash('warning', Yii::t('usuario', 'Your role requires 2FA, you won\'t be able to use the application until you enable it'));
return Yii::$app->response->redirect(['/user/settings/account'])->send();
}
return parent::beforeAction($action);
}
}

View File

@ -11,8 +11,10 @@
namespace Da\User\Helper;
use Yii;
use yii\base\Exception;
use yii\base\Security;
use yii\base\InvalidConfigException;
class SecurityHelper
{
@ -60,25 +62,48 @@ class SecurityHelper
return $this->security->validatePassword($password, $hash);
}
public function generatePassword($length)
public function generatePassword($length, $minPasswordRequirements = null)
{
$sets = [
'abcdefghjkmnpqrstuvwxyz',
'ABCDEFGHJKMNPQRSTUVWXYZ',
'23456789',
'lower' => 'abcdefghjkmnpqrstuvwxyz',
'upper' => 'ABCDEFGHJKMNPQRSTUVWXYZ',
'digit' => '123456789',
'special' => '!#$%&*+,-.:;<=>?@_~'
];
$all = '';
$password = '';
foreach ($sets as $set) {
$password .= $set[array_rand(str_split($set))];
if (!isset($minPasswordRequirements)) {
if (isset(Yii::$app->getModule('user')->minPasswordRequirements)) {
$minPasswordRequirements = Yii::$app->getModule('user')->minPasswordRequirements;
}
else {
$minPasswordRequirements = [
'lower' => 1,
'digit' => 1,
'upper' => 1,
];
}
}
if (isset($minPasswordRequirements['min']) && $length < $minPasswordRequirements['min']) {
$length = $minPasswordRequirements['min'];
}
foreach ($sets as $setKey => $set) {
if (isset($minPasswordRequirements[$setKey])) {
for ($i = 0; $i < $minPasswordRequirements[$setKey]; $i++) {
$password .= $set[array_rand(str_split($set))];
}
}
$all .= $set;
}
$passwordLength = strlen($password);
if ($passwordLength > $length) {
throw new InvalidConfigException('The minimum length is incompatible with other minimum requirements.');
}
$all = str_split($all);
for ($i = 0; $i < $length - count($sets); ++$i) {
for ($i = 0; $i < $length - $passwordLength; ++$i) {
$password .= $all[array_rand($all)];
}
$password = str_shuffle($password);
return $password;

View File

@ -0,0 +1,73 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Migration\Session;
use Da\User\Helper\MigrationHelper;
use yii\db\Migration;
class m000000_000001_create_session_history_table extends Migration
{
const SESSION_HISTORY_TABLE = '{{%session_history}}';
const USER_TABLE = '{{%user}}';
/**
* {@inheritdoc}
*/
public function safeUp()
{
$this->createTable(self::SESSION_HISTORY_TABLE, [
'user_id' => $this->integer(),
'session_id' => $this->string()->null(),
'user_agent' => $this->string()->notNull(),
'ip' => $this->string(45)->notNull(),
'created_at' => $this->integer()->notNull(),
'updated_at' => $this->integer()->notNull(),
]);
$this->createIndex(
'{{%session_history_user_id}}',
self::SESSION_HISTORY_TABLE,
['user_id']
);
$this->createIndex(
'{{%session_history_session_id}}',
self::SESSION_HISTORY_TABLE,
['session_id']
);
$this->createIndex(
'{{%session_history_updated_at}}',
self::SESSION_HISTORY_TABLE,
['updated_at']
);
$this->addForeignKey(
'{{%fk_user_session_history}}',
self::SESSION_HISTORY_TABLE,
'user_id',
self::USER_TABLE,
'id',
'CASCADE',
MigrationHelper::isMicrosoftSQLServer($this->db->driverName) ? 'NO ACTION' : 'RESTRICT'
);
}
/**
* {@inheritdoc}
*/
public function safeDown()
{
$this->dropTable(self::SESSION_HISTORY_TABLE);
}
}

View File

@ -97,7 +97,7 @@ abstract class AbstractAuthItem extends Model
return [
['itemName', 'safe'],
['name', 'required'],
['name', 'match', 'pattern' => '/^\w[\w.:\-]+\w$/'],
['name', 'match', 'pattern' => '/^\w[\w.:\-]+\w$/u'],
[['name', 'description', 'rule'], 'trim'],
[
'name',

110
src/User/Model/SessionHistory.php Executable file
View File

@ -0,0 +1,110 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Model;
use Da\User\Module;
use Da\User\Query\SessionHistoryQuery;
use Da\User\Traits\ModuleAwareTrait;
use Yii;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\db\ActiveQuery;
/**
* @property int $user_id
* @property string $session_id
* @property string $user_agent
* @property string $ip
* @property int $created_at
* @property int $updated_at
*
* @property User $user
* @property bool $isActive
*
* Dependencies:
* @property-read Module $module
*/
class SessionHistory extends ActiveRecord
{
use ModuleAwareTrait;
/**
* {@inheritdoc}
*/
public static function tableName()
{
return '{{%session_history}}';
}
/** @inheritdoc */
public function behaviors()
{
return [
[
'class' => TimestampBehavior::class,
'updatedAtAttribute' => false,
]
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'user_id' => Yii::t('usuario', 'User ID'),
'session_id' => Yii::t('usuario', 'Session ID'),
'user_agent' => Yii::t('usuario', 'User agent'),
'ip' => Yii::t('usuario', 'IP'),
'created_at' => Yii::t('usuario', 'Created at'),
'updated_at' => Yii::t('usuario', 'Last activity'),
];
}
/**
* @return bool Whether the session is an active or not.
*/
public function getIsActive()
{
return isset($this->session_id) && $this->updated_at + $this->getModule()->rememberLoginLifespan > time();
}
/**
* @return ActiveQuery
*/
public function getUser()
{
return $this->hasOne($this->module->classMap['User'], ['id' => 'user_id']);
}
/** @inheritdoc */
public function beforeSave($insert)
{
if ($insert && empty($this->session_id)) {
$this->setAttribute('session_id', Yii::$app->session->getId());
}
return parent::beforeSave($insert);
}
/** @inheritdoc */
public static function primaryKey()
{
return ['user_id', 'session_id'];
}
public static function find()
{
return new SessionHistoryQuery(static::class);
}
}

52
src/User/Module.php Normal file → Executable file
View File

@ -22,6 +22,21 @@ use yii\helpers\Html;
*/
class Module extends BaseModule
{
/**
* @var bool Enable the 'session history' function
* Using with {@see SessionHistoryDecorator}
*/
public $enableSessionHistory = false;
/**
* @var int|bool The number of 'session history' records will be stored for user
* if equals false records will not be deleted
*/
public $numberSessionHistory = false;
/**
* @var int|bool The time after which the expired 'session history' will be deleted
* if equals false records will not be deleted
*/
public $timeoutSessionHistory = false;
/**
* @var bool whether to enable european G.D.P.R. compliance.
* This will add a few elements to comply with european general data protection regulation.
@ -81,6 +96,10 @@ class Module extends BaseModule
* @var bool whether to enable two factor authentication or not
*/
public $enableTwoFactorAuthentication = false;
/**
* @var array list of permissions for which two factor authentication is mandatory
*/
public $twoFactorAuthenticationForcedPermissions = [];
/**
* @var int cycles of key generation are set on 30 sec. To avoid sync issues, increased validity up to 60 sec.
* @see http://2fa-library.readthedocs.io/en/latest/
@ -211,6 +230,23 @@ class Module extends BaseModule
*/
public $disableIpLogging = false;
/**
* @var array Minimum requirements when a new password is automatically generated.
* Array structure: `requirement => minimum number characters`.
*
* Possible array keys:
* - lower: minimum number of lowercase characters;
* - upper: minimum number of uppercase characters;
* - digit: minimum number of digits;
* - special: minimum number of special characters;
* - min: minimum number of characters (= minimum length).
*/
public $minPasswordRequirements = [
'lower' => 1,
'digit' => 1,
'upper' => 1,
];
/**
* @return string with the hit to be used with the give consent checkbox
*/
@ -230,4 +266,20 @@ class Module extends BaseModule
return $this->gdprConsentMessage ?: $defaultConsentMessage;
}
/**
* @return bool
*/
public function hasNumberSessionHistory()
{
return $this->numberSessionHistory !== false && $this->numberSessionHistory > 0;
}
/**
* @return bool
*/
public function hasTimeoutSessionHistory()
{
return $this->timeoutSessionHistory !== false && $this->timeoutSessionHistory > 0;
}
}

View File

@ -0,0 +1,158 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Query;
use Da\User\Traits\ModuleAwareTrait;
use yii\web\Session;
use Yii;
class SessionHistoryCondition
{
use ModuleAwareTrait;
private $session;
public function __construct(Session $session)
{
$this->session = $session;
}
public function unbindSession()
{
return ['session_id' => null];
}
public function bySession($sessionId)
{
return ['session_id' => $sessionId];
}
public function byUser($userId)
{
return [
'user_id' => $userId,
];
}
public function byUserSession($userId, $sessionId)
{
return [
'user_id' => $userId,
'session_id' => $sessionId,
];
}
public function inactive($userId = null)
{
$where = [
'AND',
['session_id' => null]
];
if (isset($userId)) {
$where[] = $this->byUser($userId);
}
return $where;
}
public function expired($userId = null)
{
$where = [
'AND',
['<', 'updated_at', $this->getExpiredTime()]
];
if (isset($userId)) {
$where[] = $this->byUser($userId);
}
return $where;
}
public function expiredInactive($userId = null)
{
return [
'OR',
$this->expired($userId),
$this->inactive($userId),
];
}
public function shouldDeleteBefore($updatedAt, $userId)
{
$condition = ['<', 'updated_at', $updatedAt];
if ($updatedAt > $this->getExpiredTime()) {
$condition = [
'OR',
[
'AND',
$this->inactive(),
$condition,
],
$this->expired()
];
}
return [
'AND',
$this->byUser($userId),
$condition,
];
}
/**
* @return int
*/
public function getExpiredTime()
{
$module = $this->getModule();
$time = time() - max($module->rememberLoginLifespan, $this->session->getTimeout());
if (false === $module->hasTimeoutSessionHistory()) {
return $time;
}
return $time - $module->timeoutSessionHistory;
}
public function inactiveData()
{
return [
'session_id' => null,
];
}
/**
* @return array
*/
public function currentUserData()
{
return [
'user_id' => Yii::$app->user->id,
'session_id' => Yii::$app->session->getId(),
'user_agent' => Yii::$app->request->userAgent,
'ip' => Yii::$app->request->userIP,
];
}
/**
* @return array
*/
public function currentUserCondition()
{
return [
'user_id' => Yii::$app->user->id,
'session_id' => Yii::$app->session->getId(),
'user_agent' => Yii::$app->request->userAgent,
];
}
}

View File

@ -0,0 +1,82 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Query;
use Da\User\Traits\ModuleAwareTrait;
use yii\db\ActiveQuery;
use Yii;
class SessionHistoryQuery extends ActiveQuery
{
use ModuleAwareTrait;
public function whereUserId($userId)
{
return $this->andWhere($this->getCondition()->byUser($userId));
}
public function whereActive()
{
return $this->andWhere(['IS NOT', 'session_id', null]);
}
public function whereInActive($userId)
{
return $this->andWhere($this->getCondition()->inactive($userId));
}
public function whereExpired($userId)
{
return $this->andWhere($this->getCondition()->expired($userId));
}
public function whereExpiredInActive($userId)
{
return $this->andWhere($this->getCondition()->expiredInactive($userId));
}
public function selectSessionId()
{
return $this->select(['session_id']);
}
public function whereUserSession($userId, $sessionId)
{
return $this->andWhere($this->getCondition()->byUserSession(
$userId,
$sessionId
));
}
public function whereCurrentUser()
{
return $this->andWhere($this->getCondition()->currentUserCondition());
}
public function oldestUpdatedTimeActiveSession($userId)
{
return $this->whereExpiredInActive($userId)
->select(['updated_at'])
->limit(1)
->offset($this->getModule()->numberSessionHistory)
->orderBy(['updated_at' => SORT_DESC])->scalar();
}
/**
* @return SessionHistoryCondition
*/
protected function getCondition()
{
return Yii::$container->get(SessionHistoryCondition::class);
}
}

View File

@ -0,0 +1,74 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Search;
use Da\User\Model\SessionHistory;
use Da\User\Traits\ContainerAwareTrait;
use yii\base\InvalidConfigException;
use yii\base\InvalidParamException;
use yii\data\ActiveDataProvider;
class SessionHistorySearch extends SessionHistory
{
use ContainerAwareTrait;
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['user_agent', 'ip'], 'safe'],
];
}
/**
* @param array $params
*
* @throws InvalidConfigException
* @throws InvalidParamException
*
* @return ActiveDataProvider
*/
public function search($params)
{
$query = SessionHistory::find()->andWhere([
'user_id' => $this->user_id,
]);
/** @var ActiveDataProvider $dataProvider */
$dataProvider = $this->make(
ActiveDataProvider::class,
[],
[
'query' => $query,
'sort' => [
'defaultOrder' => [
'updated_at' => SORT_DESC
],
]
]
);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere(['like', 'user_agent', $this->user_agent])
->andFilterWhere(['like', 'ip', $this->ip]);
return $dataProvider;
}
}

View File

@ -31,6 +31,6 @@ class ResetPasswordService implements ServiceInterface
public function run()
{
$this->model->password = $this->password;
return (bool)$this->model->save(false, ['password_hash']);
return (bool)$this->model->save(false, ['password_hash','password_changed_at']);
}
}

View File

@ -0,0 +1,43 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Service\SessionHistory;
use yii\web\DbSession;
class DBTerminateSessionsService implements TerminateSessionsServiceInterface
{
protected $sessionIds;
protected $dbSession;
protected $fieldName;
public function __construct(array $sessionIds, DbSession $dbSession, $fieldName = 'id')
{
$this->sessionIds = $sessionIds;
$this->dbSession = $dbSession;
$this->fieldName = $fieldName;
}
public function run()
{
if (in_array(session_id(), $this->sessionIds)) {
session_write_close();
}
$this->dbSession->db->createCommand()->delete(
$this->dbSession->sessionTable,
[$this->fieldName => $this->sessionIds]
)->execute();
return true;
}
}

View File

@ -0,0 +1,461 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Service\SessionHistory;
use Da\User\Model\SessionHistory;
use Da\User\Query\SessionHistoryCondition;
use Da\User\Query\SessionHistoryQuery;
use Da\User\Traits\ModuleAwareTrait;
use Yii;
use yii\db\Exception;
use yii\web\Session;
use yii\base\InvalidArgumentException as BaseInvalidArgumentException;
/**
* Decorator for the {@see Session} class for storing the 'session history'
*
* Not decorated methods:
* {@see Session::open()}
* {@see Session::close()}
* {@see Session::destroy()}
* {@see Session::get()}
* {@see Session::set()}
*/
class SessionHistoryDecorator extends Session
{
use ModuleAwareTrait;
public $sessionHistoryTable = '{{%session_history}}';
/**
* @var Session
*/
public $session;
public $condition;
public function __construct(
Session $session,
SessionHistoryCondition $historyCondition,
$config = []
) {
$this->session = $session;
$this->condition = $historyCondition;
parent::__construct($config);
}
/** @inheritdoc */
public function getUseCustomStorage()
{
return $this->session->getUseCustomStorage();
}
/** @inheritdoc */
public function getIsActive()
{
return $this->session->getIsActive();
}
/** @inheritdoc */
public function getHasSessionId()
{
return $this->session->getHasSessionId();
}
/** @inheritdoc */
public function setHasSessionId($value)
{
return $this->session->setHasSessionId($value);
}
/** @inheritdoc */
public function getId()
{
return $this->session->getId();
}
/** @inheritdoc */
public function setId($value)
{
return $this->session->setId($value);
}
/** @inheritdoc */
public function regenerateID($deleteOldSession = false)
{
return $this->getDb()->transaction(function () use ($deleteOldSession) {
$oldSid = session_id();
if (false === $this->session->regenerateID($deleteOldSession)) {
return false;
}
if (false === $this->getModule()->enableSessionHistory) {
return true;
}
$user = Yii::$app->user;
if ($user->getIsGuest()) {
$this->unbindSessionHistory($oldSid);
} else {
$this->getDB()->createCommand()
->delete(
$this->sessionHistoryTable,
$this->condition->byUserSession($user->getId(), $oldSid)
)->execute();
}
return true;
});
}
/** @inheritdoc */
public function getName()
{
return $this->session->getName();
}
/** @inheritdoc */
public function setName($value)
{
return $this->session->setName($value);
}
/** @inheritdoc */
public function getSavePath()
{
return $this->session->getSavePath();
}
/** @inheritdoc */
public function setSavePath($value)
{
return $this->session->setSavePath($value);
}
/** @inheritdoc */
public function getCookieParams()
{
return $this->session->getCookieParams();
}
/** @inheritdoc */
public function setCookieParams(array $value)
{
return $this->session->setCookieParams($value);
}
/** @inheritdoc */
public function getUseCookies()
{
return $this->session->getUseCookies();
}
/** @inheritdoc */
public function setUseCookies($value)
{
return $this->session->setUseCookies($value);
}
/** @inheritdoc */
public function getGCProbability()
{
return $this->session->getGCProbability();
}
/** @inheritdoc */
public function setGCProbability($value)
{
return $this->session->setGCProbability($value);
}
/** @inheritdoc */
public function getUseTransparentSessionID()
{
return $this->session->getUseTransparentSessionID();
}
/** @inheritdoc */
public function setUseTransparentSessionID($value)
{
return $this->session->setUseTransparentSessionID($value);
}
/** @inheritdoc */
public function getTimeout()
{
return $this->session->getTimeout();
}
/** @inheritdoc */
public function setTimeout($value)
{
return $this->session->setTimeout($value);
}
/** @inheritdoc */
public function openSession($savePath, $sessionName)
{
return $this->session->openSession($savePath, $sessionName);
}
/** @inheritdoc */
public function closeSession()
{
return $this->session->closeSession();
}
/** @inheritdoc */
public function readSession($id)
{
return $this->session->readSession($id);
}
/** @inheritdoc */
public function writeSession($id, $data)
{
return $this->session->writeSession($id, $data) &&
(
false === $this->getModule()->enableSessionHistory ||
$this->getDb()->transaction(function () use ($id, $data) {
if (Yii::$app->user->getIsGuest()) {
return true;
}
$updatedAt = ['updated_at' => time()];
$model = $this->getHistoryQuery()
->whereCurrentUser()
->one();
if (isset($model)) {
$model->updateAttributes($updatedAt);
$result = true;
} else {
$model = Yii::createObject([
'class' => SessionHistory::class,
] + $this->condition->currentUserData() + $updatedAt);
if (!$result = $model->save()) {
throw new BaseInvalidArgumentException(
print_r($model->errors, 1)
);
}
$this->displacementHistory($model->user_id);
}
return $result;
})
);
}
/** @inheritdoc */
public function destroySession($id)
{
return $this->session->destroySession($id) &&
(
false === $this->getModule()->enableSessionHistory ||
$this->getDb()->transaction(function () use ($id) {
$this->unbindSessionHistory($id);
return true;
})
);
}
/** @inheritdoc */
public function gcSession($maxLifetime)
{
return $this->session->gcSession($maxLifetime) &&
(
false === $this->getModule()->enableSessionHistory ||
$this->getDb()->transaction(function () use ($maxLifetime) {
$this->getDb()->createCommand()->update(
$this->sessionHistoryTable,
$this->condition->inactiveData(),
$this->condition->expired()
)->execute();
return true;
})
);
}
/** @inheritdoc */
public function getIterator()
{
return $this->session->getIterator();
}
/** @inheritdoc */
public function getCount()
{
return $this->session->getCount();
}
/** @inheritdoc */
public function count()
{
return $this->session->count();
}
/** @inheritdoc */
public function remove($key)
{
return $this->session->remove($key);
}
/** @inheritdoc */
public function removeAll()
{
return $this->session->removeAll();
}
/** @inheritdoc */
public function has($key)
{
return $this->session->has($key);
}
/** @inheritdoc */
public function getFlash($key, $defaultValue = null, $delete = false)
{
return $this->session->getFlash($key, $defaultValue, $delete);
}
/** @inheritdoc */
public function getAllFlashes($delete = false)
{
return $this->session->getAllFlashes($delete);
}
/** @inheritdoc */
public function setFlash($key, $value = true, $removeAfterAccess = true)
{
return $this->session->setFlash($key, $value, $removeAfterAccess);
}
/** @inheritdoc */
public function addFlash($key, $value = true, $removeAfterAccess = true)
{
return $this->session->addFlash($key, $value, $removeAfterAccess);
}
/** @inheritdoc */
public function removeFlash($key)
{
return $this->session->removeFlash($key);
}
/** @inheritdoc */
public function removeAllFlashes()
{
return $this->session->removeAllFlashes();
}
/** @inheritdoc */
public function hasFlash($key)
{
return $this->session->hasFlash($key);
}
/** @inheritdoc */
public function offsetExists($offset)
{
return $this->session->offsetExists($offset);
}
/** @inheritdoc */
public function offsetGet($offset)
{
return $this->session->offsetGet($offset);
}
/** @inheritdoc */
public function offsetSet($offset, $item)
{
return $this->session->offsetSet($offset, $item);
}
/** @inheritdoc */
public function offsetUnset($offset)
{
return $this->session->offsetUnset($offset);
}
/** @inheritdoc */
public function setCacheLimiter($cacheLimiter)
{
return $this->session->setCacheLimiter($cacheLimiter);
}
/** @inheritdoc */
public function getCacheLimiter()
{
return $this->session->getCacheLimiter();
}
/**
* @param string $id
* @return bool
* @throws Exception
*/
protected function unbindSessionHistory($id)
{
return (bool)$this->getDb()->createCommand()->update(
$this->sessionHistoryTable,
$this->condition->unbindSession(),
$this->condition->bySession($id)
)->execute();
}
/**
*
* @param int $userId
* @return bool
* @throws Exception
*/
protected function displacementHistory($userId)
{
$module = $this->getModule();
if (false === $module->hasNumberSessionHistory()) {
return true;
}
$updatedAt = $this->getHistoryQuery()
->oldestUpdatedTimeActiveSession($userId);
if (!$updatedAt) {
return true;
}
$this->getDB()->createCommand()->delete(
$this->sessionHistoryTable,
$this->condition->shouldDeleteBefore(intval($updatedAt), $userId)
)->execute();
return true;
}
/**
* @return SessionHistoryQuery
*/
protected function getHistoryQuery()
{
return Yii::$container->get(SessionHistoryQuery::class);
}
protected function getDb()
{
return Yii::$app->getDb();
}
}

View File

@ -0,0 +1,48 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Service\SessionHistory;
class TerminateSessionsService implements TerminateSessionsServiceInterface
{
protected $sessionIds;
public function __construct(array $sessionIds)
{
$this->sessionIds = $sessionIds;
}
public function run()
{
$currentSessionId = session_id();
if (session_status() === PHP_SESSION_ACTIVE) {
session_write_close();
}
foreach ($this->sessionIds as $sessionId) {
if ($sessionId === $currentSessionId) {
$currentSessionId = null;
}
session_id($sessionId);
session_start();
session_destroy();
}
if ($currentSessionId) {
session_id($currentSessionId);
}
session_start();
return true;
}
}

View File

@ -0,0 +1,19 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Service\SessionHistory;
use Da\User\Contracts\ServiceInterface;
interface TerminateSessionsServiceInterface extends ServiceInterface
{
}

View File

@ -0,0 +1,105 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Service\SessionHistory;
use Da\User\Contracts\ServiceInterface;
use Da\User\Event\SessionEvent;
use Da\User\Model\SessionHistory;
use Da\User\Model\User;
use Da\User\Traits\ContainerAwareTrait;
use Da\User\Traits\ModuleAwareTrait;
use yii\web\Session;
use Yii;
class TerminateUserSessionsService implements ServiceInterface
{
use ContainerAwareTrait;
use ModuleAwareTrait;
protected $userId;
protected $session;
protected $excludeCurrentSession;
public function __construct($userId, Session $session, $excludeCurrentSession = true)
{
$this->userId = intval($userId);
$this->session = $session;
$this->excludeCurrentSession = $excludeCurrentSession;
}
public function run()
{
$user = $this->getUser($this->userId);
$sessionIds = $this->getSessionIds($user->id);
Yii::$app->db->transaction(function () use ($sessionIds, $user) {
/** @var SessionEvent $event */
$event = $this->make(SessionEvent::class, [$user]);
$user->trigger(SessionEvent::EVENT_BEFORE_TERMINATE_USER_SESSIONS, $event);
$this->make(TerminateSessionsServiceInterface::class, [$sessionIds])->run();
$user->updateAttributes([
'auth_key' => Yii::$app->security->generateRandomString(),
]);
if ($this->excludeCurrentUser()) {
Yii::$app->user->switchIdentity(
$user,
$this->getModule()->rememberLoginLifespan
);
}
$user->trigger(SessionEvent::EVENT_AFTER_TERMINATE_USER_SESSIONS, $event);
});
return true;
}
/**
* @param int $userId
* @return User
*/
protected function getUser($userId)
{
return ($this->make(User::class))::findOne($userId);
}
/**
* @param $userId
* @return int[]
*/
protected function getSessionIds($userId)
{
/** @var SessionHistory $sessionHistory */
$sessionHistory = $this->make(SessionHistory::class);
$sessionIds = $sessionHistory::find()->whereUserId($userId)->whereActive()->selectSessionId()->column();
if ($this->excludeCurrentUser()) {
foreach ($sessionIds as $key => $sessionId) {
if ($sessionId === $this->session->id) {
unset($sessionIds[$key]);
break;
}
}
}
return $sessionIds;
}
protected function excludeCurrentUser()
{
return $this->excludeCurrentSession && $this->userId === Yii::$app->user->id;
}
}

View File

@ -57,7 +57,7 @@ class UserCreateService implements ServiceInterface
$model->confirmed_at = time();
$model->password = !empty($model->password)
? $model->password
: $this->securityHelper->generatePassword(8);
: $this->securityHelper->generatePassword(8, $this->getModule('user')->minPasswordRequirements);
/** @var UserEvent $event */
$event = $this->make(UserEvent::class, [$model]);
@ -87,6 +87,7 @@ class UserCreateService implements ServiceInterface
$model->addError('username', $error_msg);
}
$transaction->rollBack();
Yii::error($error_msg, 'usuario');
return false;
}
$transaction->commit();

View File

@ -51,7 +51,7 @@ class UserRegisterService implements ServiceInterface
try {
$model->confirmed_at = $this->getModule()->enableEmailConfirmation ? null : time();
$model->password = $this->getModule()->generatePasswords
? $this->securityHelper->generatePassword(8)
? $this->securityHelper->generatePassword(8, $this->getModule('user')->minPasswordRequirements)
: $model->password;
$event = $this->make(UserEvent::class, [$model]);

View File

@ -0,0 +1,85 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
namespace Da\User\Widget;
use Da\User\Model\SessionHistory;
use Da\User\Traits\ContainerAwareTrait;
use Yii;
use yii\base\InvalidConfigException;
use yii\base\InvalidParamException;
use yii\base\Widget;
use yii\helpers\ArrayHelper;
class SessionStatusWidget extends Widget
{
use ContainerAwareTrait;
/**
* @var SessionHistory
*/
public $model;
/**
* {@inheritdoc}
*
* @throws InvalidConfigException
*/
public function init()
{
parent::init();
if (!$this->model instanceof SessionHistory) {
throw new InvalidConfigException(
__CLASS__ . '::$userId should be instanceof ' . SessionHistory::class
);
}
}
/**
* {@inheritdoc}
*
* @throws InvalidParamException
*/
public function run()
{
if ($this->model->getIsActive()) {
if ($this->model->session_id === Yii::$app->session->id) {
$value = Yii::t('usuario', 'Current');
} else {
$value = Yii::t('usuario', 'Active');
}
} else {
$value = Yii::t('usuario', 'Inactive');
}
return $value;
}
/**
* Returns available auth items to be attached to the user.
*
* @param int|null type of auth items or null to return all
*
* @return array
*/
protected function getAvailableItems($type = null)
{
return ArrayHelper::map(
$this->getAuthManager()->getItems($type),
'name',
function ($item) {
return empty($item->description)
? $item->name
: $item->name . ' (' . $item->description . ')';
}
);
}
}

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'IP' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -17,70 +17,9 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'An email with instructions to create a new password has been sent to {email} if '.
'it is associated with an {appName} account. Your existing password has not been changed.'
=> 'Eine Email mit Hinweisen, wie ein Kennwort erstellt wurde an {email} gesendet, '.
'sofern es mit dem Konto {appName} verbunden ist. Das aktuelle Kennwort wurde nicht geändert.',
'Are you sure you wish the user to change their password at next login?'
=> 'Bist Du sicher, dass der Benutzer sein Kennwort beim nächsten Anmelden ändern soll?',
'Back to privacy settings' => 'Zurück zu Privatsphäre-Einstellungen',
'Data processing consent' => 'Zustimmung zur Datenverarbeitung',
'Delete my account' => 'Mein Benutzerkonto löschen',
'Delete personal data' => 'Persönliche Daten löschen',
'Deleted by GDPR request' => 'Gelöscht gemäß DSGVO-Anforderung',
'Disable two factor authentication' => 'Zwei-Faktor-Authentifizierung deaktivieren',
'Download my data' => 'Eigene Daten herunterladen',
'Enable two factor authentication' => 'Zwei-Faktor-Authentifizierung aktivieren',
'Export my data' => 'Eigene Daten exportieren',
'Force password change at next login' => 'Kennwort-Änderung beim nächsten Anmelden erzwingen',
'Here you can download your personal data in a comma separated values format.'
=> 'Hier kannst Du eigene persönliche Daten in Komma-separiertem Format herunterladen',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. '.
'For more information read our {privacyPolicy}'
=> 'Ich stimme der Verarbeitung meiner persönlichen Daten und der Benutzung von Cookies zur '.
'Vereinfachung der Benutzer dieses Services zu. Weitere Informationen stehen in unserer {privacyPolicy}',
'Invalid password' => 'Ungültiges Kennwort',
'Invalid two factor authentication code' => 'Ungültiger Zwei-Faktor-Authentifizierungs-Code',
'Last login IP' => 'Letzte Anmeldung von IP',
'Last login time' => 'Letzte Anmeldung',
'Last password change' => 'Letzte Kennwort-Änderung',
'Once you have deleted your data, you will not longer be able to sign in with this account.'
=> 'Wenn Du die eigenen Daten gelöscht hast, kannst Du Dich mit diesem Benutzernamen nicht mehr anmelden.',
'Password age' => 'Kennwort-Alter',
'Privacy' => 'Privatsphäre',
'Privacy settings' => 'Privatsphäre-Einstellungen',
'Rule class name' => 'Regel-Klassen-Name',
'Select rule...' => 'Regel auswählen...',
'There was an error in saving user' => 'Fehler beim Speichern des Benutzers',
'This will disable two factor authentication. Are you sure?'
=> 'Hiermit deaktivierst Du die Zwei-Faktor-Authentifizierung. Bist Du sicher?',
'This will remove your personal data from this site. You will no longer be able to sign in.'
=> 'Hiermit löschst Du Deine persönlichen Daten von diesem Service. '.
'Du wirst Dich dann nicht mehr anmelden können.',
'Two Factor Authentication (2FA)' => 'Zwei-Faktor-Authentifizierung (2FA)',
'Two factor authentication code' => 'Zwei-Faktor-Authentifizierungs-Code',
'Two factor authentication has been disabled.' => 'Zwei-Faktor-Authentifizierung wurde deaktiviert',
'Two factor authentication protects you in case of stolen credentials'
=> 'Zwei-Faktor-Authentifizierung schützt Dich bei gestohlenen Zugangsdaten',
'Two factor authentication successfully enabled.' => 'Zwei-Faktor-Authentifizierung wurde erfolgreich aktiviert',
'Unable to disable Two factor authentication.'
=> 'Fehler beim Deaktivieren der Zwei-Faktor-Authentifizierung',
'User will be required to change password at next login'
=> 'Der Benutzer muss bei der nächsten Aneldung sein kennwort ändern',
'You are about to delete all your personal data from this site.'
=> 'Du löschst damit alle persönlichen Daten von diesem Service',
'Your consent is required to register' => 'Du musst Deine Zustimmung registrieren',
'Your password has expired, you must change it now' => 'Dein Kennwort ist abgelaufen. Du musst es nun ändern',
'Your personal information has been removed' => 'Deine persönlichen Daten wurden gelöscht',
'privacy policy' => 'Datenschutzrichtlinie',
'A message has been sent to your email address. ' => 'Eine Nachricht wurde an Deine E-Mail Adresse gesendet',
'(not set)' => '(nicht gesetzt)',
'A confirmation message has been sent to your new email address'
=> 'Eine Bestätigungsnachricht wurde an Deine neue E-Mail Adresse gesendet',
'A message has been sent to your email address. It contains a confirmation link that you must '.
'click to complete registration.'
=> 'Eine Nachricht wurde an Deine E-Mail-Adresse gesendet. '.
'Sie enthält einen Bestätigungslink den Du anklicken musst, um die Registrierung abzuschließen.',
'A confirmation message has been sent to your new email address' => 'Eine Bestätigungsnachricht wurde an Deine neue E-Mail Adresse gesendet',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Eine Nachricht wurde an Deine E-Mail-Adresse gesendet. Sie enthält einen Bestätigungslink den Du anklicken musst, um die Registrierung abzuschließen.',
'A new confirmation link has been sent' => 'Ein neuer Bestätigungs-Link wurde versendet',
'A password will be generated automatically if not provided' => 'Leer lassen, um automatisch ein Passwort zu generieren',
'Account' => 'Konto',
@ -89,12 +28,14 @@ return [
'Account details have been updated' => 'Kontodetails gespeichert',
'Account settings' => 'Kontoeinstellungen',
'Already registered? Sign in!' => 'Bereits registriert? Zur Anmeldung!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Eine Email mit Hinweisen, wie ein Kennwort erstellt wurde an {email} gesendet, sofern es mit dem Konto {appName} verbunden ist. Das aktuelle Kennwort wurde nicht geändert.',
'An error occurred processing your request' => 'Es ist ein Fehler aufgetreten',
'Are you sure you want to block this user?' => 'Bist Du sicher, dass Du diesen Benutzer blockieren willst?',
'Are you sure you want to confirm this user?' => 'Bist Du sicher, dass Du diesen Benutzer bestätigen willst?',
'Are you sure you want to delete this user?' => 'Bist Du sicher, dass Du diesen Benutzer löschen willst?',
'Are you sure you want to switch to this user for the rest of this Session?' => 'Bist Du sicher, dass Du zu diesem Benutzer zu wechseln willst für den Rest dieser Session?',
'Are you sure you want to unblock this user?' => 'Bist Du sicher, dass Du diesen Benutzer wieder freischalten willst?',
'Are you sure you wish the user to change their password at next login?' => 'Bist Du sicher, dass der Benutzer sein Kennwort beim nächsten Anmelden ändern soll?',
'Are you sure you wish to send a password recovery email to this user?' => 'Bist Du sicher, dass Du eine Passwortwiederherstellungs-Mail an diesen Benutzer senden möchtest?',
'Are you sure? Deleted user can not be restored' => 'Bist Du sicher? Gelöschte Benutzer können nicht wiederhergestellt werden',
'Are you sure? There is no going back' => 'Bist Du sicher? Es gibt kein Zurück',
@ -110,6 +51,7 @@ return [
'Authorization rule has been updated.' => 'Berechtigungsregel wurde gespeichert.',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Fast geschafft. Nun musst Du nur noch den Aktivierungslink anklicken, der an Deine neue E-Mail Adresse gesendet wurde.',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Fast geschafft. Nun musst Du nur noch den Aktivierungslink anklicken, der an Deine alte E-Mail Adresse gesendet wurde.',
'Back to privacy settings' => 'Zurück zu Privatsphäre-Einstellungen',
'Bio' => 'Bio',
'Block' => 'Blockieren',
'Block status' => 'Blockadestatus',
@ -140,24 +82,35 @@ return [
'Credentials will be sent to the user by email' => 'Die Zugangsdaten werden dem Nutzer per E-Mail gesendet',
'Current password' => 'Aktuelles Passwort',
'Current password is not valid' => 'Das aktuelle Passwort ist nicht korrekt',
'Data processing consent' => 'Zustimmung zur Datenverarbeitung',
'Delete' => 'Löschen',
'Delete account' => 'Konto Löschen',
'Delete my account' => 'Mein Benutzerkonto löschen',
'Delete personal data' => 'Persönliche Daten löschen',
'Deleted by GDPR request' => 'Gelöscht gemäß DSGVO-Anforderung',
'Description' => 'Beschreibung',
'Didn\'t receive confirmation message?' => 'Bestätigungs-Mail nicht empfangen?',
'Disable two factor authentication' => 'Zwei-Faktor-Authentifizierung deaktivieren',
'Disconnect' => 'Trennen',
'Don\'t have an account? Sign up!' => 'Du hast noch kein Konto? Registrieren!',
'Download my data' => 'Eigene Daten herunterladen',
'Email' => 'E-Mail',
'Email (public)' => 'E-Mail (öffentlich)',
'Enable' => 'aktivieren',
'Enable two factor authentication' => 'Zwei-Faktor-Authentifizierung aktivieren',
'Error occurred while changing password' => 'Fehler beim Ändern des Passworts',
'Error occurred while confirming user' => 'Fehler beim Bestätigen des Benutzers',
'Error occurred while deleting user' => 'Fehler beim Löschen des Benutzers',
'Error sending registration message to "{email}". Please try again later.' => 'Fehler beim Senden der Registrierungsnachricht an "{email}". Bitte später noch einmal probieren.',
'Error sending welcome message to "{email}". Please try again later.' => 'Fehler beim Senden der Willkommensnachricht an "{email}". Bitte später noch einmal probieren.',
'Export my data' => 'Eigene Daten exportieren',
'Finish' => 'Fertig',
'Force password change at next login' => 'Kennwort-Änderung beim nächsten Anmelden erzwingen',
'Forgot password?' => 'Passwort vergessen?',
'Gravatar email' => 'Gravatar E-Mail',
'Hello' => 'Hallo',
'Here you can download your personal data in a comma separated values format.' => 'Hier kannst Du eigene persönliche Daten in Komma-separiertem Format herunterladen',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ich stimme der Verarbeitung meiner persönlichen Daten und der Benutzung von Cookies zur Vereinfachung der Benutzer dieses Services zu. Weitere Informationen stehen in unserer {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Wenn Du Dich bereits registriert hast, melde Dich an und verbinde dieses Konto auf der Einstellungs-Seite',
'If you cannot click the link, please try pasting the text into your browser' => 'Wenn Du den Link nicht anklicken kannst, versuche, diesen in Deine Browser-Leiste einzufügen',
'If you did not make this request you can ignore this email' => 'Wenn Sie diese Anfrage nicht gemacht haben, können Sie diese E-Mail ignorieren',
@ -168,10 +121,15 @@ return [
'Information' => 'Information',
'Invalid login or password' => 'Falscher Login oder falsches Passwort',
'Invalid or expired link' => 'Falscher oder abgelaufener Link',
'Invalid password' => 'Ungültiges Kennwort',
'Invalid two factor authentication code' => 'Ungültiger Zwei-Faktor-Authentifizierungs-Code',
'Invalid value' => 'Falscher Wert',
'It will be deleted forever' => 'Es wird dauerhaft gelöscht',
'Items' => 'Elemente',
'Joined on {0, date}' => 'Mitglies seit {0, date}',
'Last login IP' => 'Letzte Anmeldung von IP',
'Last login time' => 'Letzte Anmeldung',
'Last password change' => 'Letzte Kennwort-Änderung',
'Location' => 'Ort',
'Login' => 'Anmelden',
'Logout' => 'Abmelden',
@ -188,12 +146,16 @@ return [
'Not blocked' => 'Nicht geblockt',
'Not found' => 'Nicht gefunden',
'Once you delete your account, there is no going back' => 'Wenn Du Dein Konto gelöscht hast, gibt es kein zurück mehr',
'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Wenn Du die eigenen Daten gelöscht hast, kannst Du Dich mit diesem Benutzernamen nicht mehr anmelden.',
'Password' => 'Passwort',
'Password age' => 'Kennwort-Alter',
'Password has been changed' => 'Passwort wurde geändert',
'Permissions' => 'Berechtigungen',
'Please be certain' => 'Bist Du wirklich sicher?',
'Please click the link below to complete your password reset' => 'Bitte klicke den Link unten, um Deine Passwort-Wiederherstellung abzuschließen',
'Please fix following errors:' => 'Bitte behebe die folgenden Fehler',
'Privacy' => 'Privatsphäre',
'Privacy settings' => 'Privatsphäre-Einstellungen',
'Profile' => 'Profil',
'Profile details' => 'Profildetails',
'Profile details have been updated' => 'Profildetails wurden gespeichert',
@ -213,6 +175,7 @@ return [
'Roles' => 'Rollen',
'Rule' => 'Regel',
'Rule class must extend "yii\\rbac\\Rule".' => 'Regelklasse muss "yii\\rbac\\Rule" erweitern.',
'Rule class name' => 'Regel-Klassen-Name',
'Rule name' => 'Regelname',
'Rule name {0} is already in use' => 'Regelname {0} bereits in Benutzung',
'Rule {0} does not exists' => 'Regel {0} existiert nicht',
@ -220,6 +183,7 @@ return [
'Rules' => 'Regeln',
'Save' => 'Speichern',
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scanne den Qr-Code mit der Google Authenticator App, dann füge den temporären Schlüssel in das Feld und sende es ab.',
'Select rule...' => 'Regel auswählen...',
'Send password recovery email' => 'Sende Mail zur Passwortwiederherstellung',
'Sign in' => 'Anmelden',
'Sign up' => 'Registrieren',
@ -231,16 +195,25 @@ return [
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'Dein Aktivierungslink ist falsch oder abgelaufen. Bitte fordere einen neuen an.',
'The verification code is incorrect.' => 'Der Verifizierungsschlüssel ist ungültig.',
'There is neither role nor permission with name "{0}"' => 'Es gibt weder eine Rolle noch eine Berechtigung mit dem Namen "{0}"',
'There was an error in saving user' => 'Fehler beim Speichern des Benutzers',
'This account has already been connected to another user' => 'Dieses Konto wurde bereits von einem anderen Benutzer verbunden',
'This email address has already been taken' => 'Die E-Mail Adresse ist bereits vergeben',
'This username has already been taken' => 'Dieser Benutzername ist bereits vergeben',
'This will disable two factor authentication. Are you sure?' => 'Hiermit deaktivierst Du die Zwei-Faktor-Authentifizierung. Bist Du sicher?',
'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Hiermit löschst Du Deine persönlichen Daten von diesem Service. Du wirst Dich dann nicht mehr anmelden können.',
'Time zone' => 'Zeitzone',
'Time zone is not valid' => 'Zeitzone ist ungültig',
'Two Factor Authentication (2FA)' => 'Zwei-Faktor-Authentifizierung (2FA)',
'Two factor authentication code' => 'Zwei-Faktor-Authentifizierungs-Code',
'Two factor authentication has been disabled.' => 'Zwei-Faktor-Authentifizierung wurde deaktiviert',
'Two factor authentication protects you in case of stolen credentials' => 'Zwei-Faktor-Authentifizierung schützt Dich bei gestohlenen Zugangsdaten',
'Two factor authentication successfully enabled.' => 'Zwei-Faktor-Authentifizierung wurde erfolgreich aktiviert',
'Unable to confirm user. Please, try again.' => 'Der Benutzer konnte nicht bestätigt werden. Bitte versuche es nochmal.',
'Unable to create an account.' => 'Konto konnte nicht erstellt werden',
'Unable to create authorization item.' => 'Authorization Item konnte nicht erstellt werden',
'Unable to create new authorization rule.' => 'Es ist nicht möglich, eine neue Authentifizierungsregel zu erstellen.',
'Unable to delete user. Please, try again later.' => 'Benutzer konnte nicht gelöscht werden.',
'Unable to disable Two factor authentication.' => 'Fehler beim Deaktivieren der Zwei-Faktor-Authentifizierung',
'Unable to remove authorization item.' => 'Authentifizierung-Item konnte nicht gelöscht werden.',
'Unable to send confirmation link' => 'Konnte Bestätigungslink nicht versenden',
'Unable to send recovery message to the user' => 'Wiederherstellungsnachricht konnte nicht an den Benutzer zu gesendet werden.',
@ -264,6 +237,7 @@ return [
'User has been deleted' => 'Benutzer wurde gelöscht',
'User is not found' => 'Benutzer wurde nicht gefunden',
'User not found.' => 'Benutzer nicht gefunden.',
'User will be required to change password at next login' => 'Der Benutzer muss bei der nächsten Aneldung sein kennwort ändern',
'Username' => 'Benutzername',
'Users' => 'Benutzer',
'VKontakte' => 'VKontakte',
@ -276,6 +250,7 @@ return [
'Website' => 'Webseite',
'Welcome to {0}' => 'Willkommen auf {0}',
'Yandex' => 'Yandex',
'You are about to delete all your personal data from this site.' => 'Du löschst damit alle persönlichen Daten von diesem Service',
'You can assign multiple roles or permissions to user by using the form below' => 'Du kannst mehrere Rollen oder Berechtigungen zuweisen',
'You can connect multiple accounts to be able to log in using them' => 'Du kannst mehrere Konten verbinden und sich mit diesen anmelden',
'You cannot remove your own account' => 'Du kannst Dein eigenes Konto nicht löschen',
@ -289,9 +264,39 @@ return [
'Your account has been created and a message with further instructions has been sent to your email' => 'Dein Konto wurde erstellt und eine Nachricht mit weiteren Anweisungen wurde an Deine E-Mail Adresse gesendet',
'Your account on {0} has been created' => 'Ihr Konto auf {0} wurde erstellt',
'Your confirmation token is invalid or expired' => 'Dein Bestätigungs-Token ist falsch oder abgelaufen',
'Your consent is required to register' => 'Du musst Deine Zustimmung registrieren',
'Your email address has been changed' => 'Deine E-Mail Adresse wurde geändert',
'Your password has expired, you must change it now' => 'Dein Kennwort ist abgelaufen. Du musst es nun ändern',
'Your personal information has been removed' => 'Deine persönlichen Daten wurden gelöscht',
'Your profile has been updated' => 'Dein Profil wurde gespeichert',
'privacy policy' => 'Datenschutzrichtlinie',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, dd. MMM YYYY, HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd. MMMM YYYY, HH:mm}',
'{0} cannot be blank.' => '{0} darf nicht leer sein.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Data privacy' => '',
'Submit' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@Eine Nachricht wurde an Deine E-Mail Adresse gesendet@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'A message has been sent to your email address. ' => '@@Eine Nachricht wurde an Deine E-Mail Adresse gesendet@@',
];

View File

@ -18,31 +18,26 @@
*/
return [
'(not set)' => '(nicht gesetzt)',
'A confirmation message has been sent to your new email address'
=> 'Eine Bestätigungsnachricht wurde an Ihre neue E-Mail Adresse versendet',
'A message has been sent to your email address. It contains a confirmation link that you must '.
'click to complete registration.'
=> 'Eine Nachricht wurde an Ihre E-Mail-Adresse gesendet. '.
'Sie enthält einen Bestätigungslink den Sie anklicken müssen, um die Registrierung abzuschließen.',
'A new confirmation link has been sent' => 'Ein neuer Bestätigungs-Link wurde versendet',
'A confirmation message has been sent to your new email address' => 'Eine Bestätigungsnachricht wurde an Ihre neue E-Mail-Adresse versendet',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Eine Nachricht wurde an Ihre E-Mail-Adresse gesendet. Sie enthält einen Bestätigungslink, den Sie anklicken müssen, um die Registrierung abzuschließen.',
'A new confirmation link has been sent' => 'Ein neuer Bestätigungslink wurde versendet',
'A password will be generated automatically if not provided' => 'Leer lassen, um automatisch ein Passwort zu generieren',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'Gemäß der europäischen Datenschutzgrundverordnung (DSGVO) benötigen wir Ihre Zustimmung, um mit Ihren personenbezogenen Daten zu arbeiten.',
'Account' => 'Konto',
'Account confirmation' => 'Kontobestätigung',
'Account details' => 'Kontodetails',
'Account details have been updated' => 'Kontodetails gespeichert',
'Account settings' => 'Kontoeinstellungen',
'Already registered? Sign in!' => 'Bereits registriert? Zur Anmeldung!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' =>
'Eine E-Mail mit Hinweisen, wie ein Kennwort erstellt wird wurde an {email} gesendet, '.
'sofern es mit dem Konto {appName} verbunden ist. Das aktuelle Kennwort wurde nicht geändert.',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Eine E-Mail mit Hinweisen, wie ein Kennwort erstellt wird, wurde an {email} gesendet, sofern es mit dem Konto {appName} verbunden ist. Das aktuelle Kennwort wurde nicht geändert.',
'An error occurred processing your request' => 'Es ist ein Fehler aufgetreten',
'Are you sure you want to block this user?' => 'Sind Sie sicher, dass Sie diesen Benutzer blockieren wollen?',
'Are you sure you want to confirm this user?' => 'Sind Sie sicher, dass Sie diesen Benutzer bestätigen wollen?',
'Are you sure you want to delete this user?' => 'Sind Sie sicher, dass Sie diesen Benutzer löschen wollen?',
'Are you sure you want to switch to this user for the rest of this Session?' => 'Sind Sie sicher, dass Sie zu diesem Benutzer zu wechseln möchten für den Rest dieser Session?',
'Are you sure you want to switch to this user for the rest of this Session?' => 'Sind Sie sicher, dass Sie zu diesem Benutzer für den Rest der Session wechseln möchten?',
'Are you sure you want to unblock this user?' => 'Sind Sie sicher, dass Sie diesen Benutzer wieder freischalten wollen?',
'Are you sure you wish the user to change their password at next login?' => 'Sind Sie sicher, dass der benutzer sein Kennwort beim nächsten Anmeldenändern soll?',
'Are you sure you wish to send a password recovery email to this user?' => 'Sind Sie sicher, dass Sie eine Passwortwiederherstellungs-Mail an diesen Benutzer senden möchten?',
'Are you sure you wish the user to change their password at next login?' => 'Sind Sie sicher, dass der Benutzer sein Kennwort beim nächsten Anmelden ändern soll?',
'Are you sure you wish to send a password recovery email to this user?' => 'Sind Sie sicher, dass Sie eine E-Mail zur Passwortwiederherstellung an diesen Benutzer senden möchten?',
'Are you sure? Deleted user can not be restored' => 'Sind Sie sicher? Gelöschte Benutzer können nicht wiederhergestellt werden',
'Are you sure? There is no going back' => 'Sind Sie sicher? Es gibt kein Zurück',
'Assignments' => 'Zuordnungen',
@ -55,15 +50,15 @@ return [
'Authorization rule has been added.' => 'Berechtigungsregel wurde hinzugefügt.',
'Authorization rule has been removed.' => 'Berechtigungsregel wurde entfernt.',
'Authorization rule has been updated.' => 'Berechtigungsregel wurde gespeichert.',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Fast geschafft. Nun müssen Sie nur noch den Aktivierungslink besuchen, der an ihre neue E-Mail Adresse gesendet wurde.',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Fast geschafft. Nun müssen Sie nur noch den Aktivierungslink besuchen, der an ihre alte E-Mail Adresse gesendet wurde.',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Fast geschafft. Nun müssen Sie nur noch den Aktivierungslink besuchen, der an ihre neue E-Mail-Adresse gesendet wurde.',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Fast geschafft. Nun müssen Sie nur noch den Aktivierungslink besuchen, der an ihre alte E-Mail-Adresse gesendet wurde.',
'Back to privacy settings' => 'Zurück zu Privatsphäre-Einstellungen',
'Bio' => 'Bio',
'Block' => 'Blockieren',
'Block status' => 'Blockadestatus',
'Block status' => 'Blockstatus',
'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Blockiert am {0, date, dd. MMMM YYYY, HH:mm}',
'Cancel' => 'Abbrechen',
'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kann die Rolle "{0}" nicht zuordnen da der AuthManager in der Console Application nicht konfiguriert ist.',
'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Kann die Rolle "{0}" nicht zuordnen da, der AuthManager in der Konsolen Applikation nicht konfiguriert ist.',
'Change your avatar at Gravatar.com' => 'Ändern Sie ihren Avatar auf Gravatar.com',
'Children' => 'Unterelemente',
'Class' => 'Klasse',
@ -88,6 +83,7 @@ return [
'Credentials will be sent to the user by email' => 'Die Zugangsdaten werden dem Nutzer per E-Mail versendet',
'Current password' => 'Aktuelles Passwort',
'Current password is not valid' => 'Das aktuelle Passwort ist nicht korrekt',
'Data privacy' => 'Datenschutz',
'Data processing consent' => 'Zustimmung zur Datenverarbeitung',
'Delete' => 'Löschen',
'Delete account' => 'Konto Löschen',
@ -116,15 +112,14 @@ return [
'Gravatar email' => 'Gravatar E-Mail',
'Hello' => 'Hallo',
'Here you can download your personal data in a comma separated values format.' => 'Hier können Sie eigene persönliche Daten in komma-separiertem Format herunterladen',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Ich stimme der Verarbeitung meiner persönlichen Daten und der Benutzung von Cookies zur Vereinfachung der Benutzer dieses Services zu. Weitere Informationen stehen in unserer {privacyPolicy}@@',
'If you already registered, sign in and connect this account on settings page' => 'Wenn Sie sich bereits registriert haben, melden Sie sich an und verbinden Sie dieses Konto auf der Einstellungs-Seite',
'If you cannot click the link, please try pasting the text into your browser' => 'Wenn Sie den Link nicht anklicken können, versuchen Sie, diesen in ihre Browser-Leiste einzufügen',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ich stimme der Verarbeitung meiner persönlichen Daten und der Benutzung von Cookies zur Vereinfachung der Benutzer dieser Webseite zu. Weitere Informationen stehen in unserer {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Wenn Sie bereits registriert sind, melden Sie sich an und verbinden Sie dieses Konto auf der Einstellungsseite',
'If you cannot click the link, please try pasting the text into your browser' => 'Wenn Sie den Link nicht anklicken können, versuchen Sie, diesen in ihre Browserleiste einzufügen',
'If you did not make this request you can ignore this email' => 'Wenn Sie diese Anfrage nicht gemacht haben, können Sie diese E-Mail ignorieren',
'Impersonate this user' => 'Wechsle zu diesem Benutzer',
'In order to complete your registration, please click the link below' => 'Um Ihre Registrierung abzuschliessen, klicken Sie bitte auf den Link unten',
'In order to complete your registration, please click the link below' => 'Um Ihre Registrierung abzuschließen, klicken Sie bitte auf den folgenden Link',
'In order to complete your request, please click the link below' => 'Um Ihre Anfrage abzuschliessen, klicken Sie bitte auf den Link unten',
'In order to finish your registration, we need you to enter following fields' => 'Um Ihre Registrierung abzuschliessen, müssen Sie noch die folgenden Felder ausfüllen',
'Information' => 'Information',
'Invalid login or password' => 'Falscher Login oder falsches Passwort',
'Invalid or expired link' => 'Falscher oder abgelaufener link',
'Invalid password' => 'Ungültiges Kennwort',
@ -135,7 +130,7 @@ return [
'Joined on {0, date}' => 'Mitglied seit {0, date}',
'Last login IP' => 'Letzte Anmeldung von IP',
'Last login time' => 'Letzte Anmeldung',
'Last password change' => 'Letzte Kennwortnderung',
'Last password change' => 'Letzte Passwortänderung',
'Location' => 'Ort',
'Login' => 'Anmelden',
'Logout' => 'Abmelden',
@ -158,25 +153,25 @@ return [
'Password has been changed' => 'Passwort wurde geändert',
'Permissions' => 'Berechtigungen',
'Please be certain' => 'Sind Sie sich wirklich sicher?',
'Please click the link below to complete your password reset' => 'Bitte klicken Sie auf den Link unten um ihre Passwort-Wiederherstellung abzuschliessen',
'Please click the link below to complete your password reset' => 'Bitte klicken Sie auf den folgenden Link, um das Zurücksetzen Ihres Passworts abzuschließen',
'Please fix following errors:' => 'Bitte beheben Sie die folgenden Fehler',
'Privacy' => 'Privatsphäre',
'Privacy settings' => 'Privatsphäre-Einstellungen',
'Profile' => 'Profil',
'Profile details' => 'Profildetails',
'Profile details have been updated' => 'Profildetails wurden gespeichert',
'Profile settings' => 'Profileinstellungen',
'Profile details' => 'Profil-Details',
'Profile details have been updated' => 'Profil-Details wurden gespeichert',
'Profile settings' => 'Profil-Einstellungen',
'Recover your password' => 'Passwort wiederherstellen',
'Recovery link is invalid or expired. Please try requesting a new one.' => 'Wiederherstellungs-Link ist falsch oder abgelaufen. Bitte fordern Sie einen neuen an',
'Recovery message sent' => 'Wiederherstellungs-Nachricht wurde gesendet',
'Recovery link is invalid or expired. Please try requesting a new one.' => 'Wiederherstellungslink ist falsch oder abgelaufen. Bitte fordern Sie einen neuen an',
'Recovery message sent' => 'Wiederherstellungsnachricht gesendet',
'Registration IP' => 'Registrierungs-IP',
'Registration on this website is disabled' => 'Die Registrierung auf dieser Webseite ist deaktiviert',
'Registration time' => 'Registrierungszeit',
'Remember me next time' => 'Anmeldung für das nächste mal merken',
'Remember me next time' => 'Anmeldung für das nächste Mal merken',
'Request new confirmation message' => 'Neuen Wiederherstellungs-Link anfordern',
'Required "key" cannot be empty.' => 'Erforderlicher "key" darf nicht leer sein.',
'Required "secret" cannot be empty.' => 'Erforderliches "secret" darf nicht leer sein.',
'Reset your password' => 'Passwort wiederherstellen',
'Reset your password' => 'Ihr Passwort zurücksetzen',
'Role "{0}" not found. Creating it.' => 'Rolle "{0}" nicht gefunden. Erstelle diese.',
'Roles' => 'Rollen',
'Rule' => 'Regel',
@ -193,7 +188,8 @@ return [
'Send password recovery email' => 'Sende Mail zur Passwortwiederherstellung',
'Sign in' => 'Anmelden',
'Sign up' => 'Registrieren',
'Something went wrong' => 'Etwas ist schiefgelaufen',
'Something went wrong' => 'Etwas ist schief gelaufen',
'Submit' => 'Absenden',
'Switch identities is disabled.' => 'Identitäten wechseln ist deaktiviert.',
'Thank you for signing up on {0}' => 'Danke für ihre Registrierung auf {0}',
'Thank you, registration is now complete.' => 'Danke, ihre Registrierung ist nun abgeschlossen.',
@ -201,22 +197,22 @@ return [
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'Ihr Aktivierungslink ist falsch oder abgelaufen. Bitte fordern Sie einen neuen an.',
'The verification code is incorrect.' => 'Der Verifizierungsschlüssel ist ungültig.',
'There is neither role nor permission with name "{0}"' => 'Es gibt weder eine Rolle noch eine Berechtigung mit dem Namen "{0}"',
'There was an error in saving user' => 'Fehler beim Speichern des Benutzers',
'There was an error in saving user' => 'Es gab einen Fehler beim Speichern des Benutzers',
'This account has already been connected to another user' => 'Dieses Konto wurde bereits von einem anderen Benutzer verbunden',
'This email address has already been taken' => 'Die E-Mail Adresse ist bereits vergeben',
'This email address has already been taken' => 'Die E-Mail-Adresse ist bereits vergeben',
'This username has already been taken' => 'Dieser Benutzername ist bereits vergeben',
'This will disable two factor authentication. Are you sure?' => 'Hiermit deaktivieren Sie die Zwei-Faktor-Authentifizierung. Sind Sie sicher?',
'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Hiermit löschen Sie Ihre persönlichen Daten von diesem Service. Sie werden sich nun nicht mehr anmelden können.',
'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Hiermit löschen Sie Ihre persönlichen Daten von dieser Webseite. Sie werden sich nun nicht mehr anmelden können.',
'Time zone' => 'Zeitzone',
'Time zone is not valid' => 'Zeitzone ist ungültig',
'Two Factor Authentication (2FA)' => 'Zwei-Faktor-Authentifizierung (2FA)',
'Two factor authentication code' => 'Zwei-Faktor-Authentifizierungs-Code',
'Two factor authentication has been disabled.' => 'Zwei-Faktor-Authentifizierung wurde deaktiviert',
'Two factor authentication protects you in case of stolen credentials' => 'Zwei-Faktor-Authentifizierung schützt Sie bei gestohlenen Zugangsdaten',
'Two factor authentication protects you in case of stolen credentials' => 'Zwei-Faktor-Authentifizierung schützt Sie im Fall von gestohlenen Zugangsdaten',
'Two factor authentication successfully enabled.' => 'Zwei-Faktor-Authentifizierung wurde erfolgreich aktiviert',
'Unable to confirm user. Please, try again.' => 'Der Benutzer konnte nicht bestätigt werden. Bitte versuchen Sie es erneut.',
'Unable to create an account.' => 'Konto konnte nicht erstellt werden',
'Unable to create authorization item.' => 'Authorization Item konnte nicht erstellt werden',
'Unable to create authorization item.' => 'Authentifizierungselement kann nicht erstellt werden',
'Unable to create new authorization rule.' => 'Unfähig eine neue Authentifizierungsregel zu erstellen.',
'Unable to delete user. Please, try again later.' => 'Benutzer konnte nicht gelöscht werden.',
'Unable to disable Two factor authentication.' => 'Fehler beim Deaktivieren der Zwei-Faktor-Authentifizierung',
@ -228,6 +224,7 @@ return [
'Unable to update block status.' => 'Konnte den Block-Status nicht ändern',
'Unblock' => 'Freischalten',
'Unconfirmed' => 'Unbestätigt',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Leider können Sie nicht mit dieser Seite arbeiten, ohne uns die Zustimmung zur Verarbeitung Ihrer Daten zu geben.',
'Update' => 'Bearbeiten',
'Update assignments' => 'Zuweisung ändern',
'Update permission' => 'Berechtigung ändern',
@ -243,24 +240,24 @@ return [
'User has been deleted' => 'Benutzer wurde gelöscht',
'User is not found' => 'Benutzer wurde nicht gefunden',
'User not found.' => 'Benutzer nicht gefunden.',
'User will be required to change password at next login' => 'Der Benutzer wird bei der nchsten Aneldung zur Kennwort-Änderungen gezwungen',
'User will be required to change password at next login' => 'Der Benutzer wird bei der nächsten Aneldung zur Kennwort-Änderungen gezwungen',
'Username' => 'Benutzername',
'Users' => 'Benutzer',
'VKontakte' => 'VKontakte',
'Verification failed. Please, enter new code.' => 'Verifizierung fehlgeschlagen. Bitte einen neuen Schlüssel eingeben.',
'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'Wir konnten die Mail zur Bestätigung Ihrer Adresse nicht noch einmal senden. Bitte kontrollieren Sie ob die E-Mail-Adresse korrekt ist oder diese bereits bestätigt wurde.',
'We have generated a password for you' => 'Ein Passwort wurde für Sie generiert',
'We have received a request to change the email address for your account on {0}' => 'Wir haben eine Anfrage, ihre E-Mail Adresse auf {0} zu verändern, bekommen',
'We have received a request to change the email address for your account on {0}' => 'Wir haben eine Anfrage, ihre E-Mail-Adresse auf {0} zu verändern, bekommen',
'We have received a request to reset the password for your account on {0}' => 'Wir haben eine Anfrage, ihr Passwort auf {0} wiederherzustellen, bekommen',
'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'Wir haben Ihnen Bestätigungslinks an die alte und neue E-Mail-Adresse geschickt. Sie müssen beide Links anklicken um die Anfrage fertigzustellen.',
'Website' => 'Webseite',
'Welcome to {0}' => 'Willkommen auf {0}',
'Yandex' => 'Yandex',
'You are about to delete all your personal data from this site.' => 'Sie löschen damit alle persönlichen Daten von diesem Service',
'You can assign multiple roles or permissions to user by using the form below' => 'Sie können mehrere Rollen oder Berechtigungen zuweisen',
'You are about to delete all your personal data from this site.' => 'Sie löschen damit alle persönlichen Daten von dieser Webseite',
'You can assign multiple roles or permissions to user by using the form below' => 'Sie können dem Benutzer mehrere Rollen oder Berechtigungen zuweisen, indem Sie das folgende Formular verwenden',
'You can connect multiple accounts to be able to log in using them' => 'Sie können mehrere Konten verbinden und sich mit diesen anmelden',
'You cannot remove your own account' => 'Sie können ihr eigenes Konto nicht löschen',
'You need to confirm your email address' => 'Sie müssen ihre E-Mail Adresse bestätigen',
'You need to confirm your email address' => 'Sie müssen ihre E-Mail-Adresse bestätigen',
'Your account details have been updated' => 'Ihre Kontodetails wurden gespeichert',
'Your account has been blocked' => 'Ihr Konto wurde blockiert',
'Your account has been blocked.' => 'Ihr Konto wurde blockiert.',
@ -269,14 +266,35 @@ return [
'Your account has been created' => 'Ihr Konto wurde erstellt',
'Your account has been created and a message with further instructions has been sent to your email' => 'Ihr Konto wurde erstellt und eine Nachricht mit weiteren Anweisungen wurde an ihre E-Mail Adresse versendet',
'Your account on {0} has been created' => 'Ihr Konto auf {0} wurde erstellt',
'Your confirmation token is invalid or expired' => 'Ihr Bestätigungs-Token ist falsch oder abgelaufen',
'Your confirmation token is invalid or expired' => 'Ihr Bestätigungstoken ist falsch oder abgelaufen',
'Your consent is required to register' => 'Sie müssen Ihre Zustimmung registrieren',
'Your email address has been changed' => 'Ihre E-Mail Adresse wurde geändert',
'Your password has expired, you must change it now' => 'Ihr Kennwort ist abgelaufen. Sie müssen es nun ändern',
'Your consent is required to work with this site' => 'Ihre Zustimmung ist erforderlich, um mit dieser Website zu arbeiten',
'Your email address has been changed' => 'Ihre E-Mail-Adresse wurde geändert',
'Your password has expired, you must change it now' => 'Ihr Passwort ist abgelaufen, Sie müssen es jetzt ändern',
'Your personal information has been removed' => 'Ihre persönlichen Daten wurden gelöscht',
'Your profile has been updated' => 'Ihr Profil wurde gespeichert',
'privacy policy' => '@@Datenschutzrichtlinie@@',
'privacy policy' => 'Datenschutzrichtlinie',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, dd. MMM YYYY, HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd. MMMM YYYY, HH:mm}',
'{0} cannot be blank.' => '{0} darf nicht leer sein.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Information' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -112,7 +112,7 @@ return [
'Gravatar email' => 'Correo electrónico de Gravatar',
'Hello' => 'Hola',
'Here you can download your personal data in a comma separated values format.' => 'Aquí puede descargar su información personal en formato de valores separados por comas.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Doy mi consentimiento para el procesamiento de mis datos personales y el uso de «cookies» para facilitar el funcionamiento de este sitio. Para más información lea nuestra {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Doy mi consentimiento para el procesamiento de mis datos personales y el uso de «cookies» para facilitar el funcionamiento de este sitio. Para más información lea nuestra {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Si ya está registrado, inicie sesión y conecte esta cuenta en la página de configuración',
'If you cannot click the link, please try pasting the text into your browser' => 'Si no puede pulsar en el enlace, intente pegar el siguiente texto en su navegador web',
'If you did not make this request you can ignore this email' => 'Si no hizo esta petición, puede ignorar este mensaje',
@ -273,11 +273,25 @@ return [
'Your password has expired, you must change it now' => 'Su contraseña ha expirado, debe cambiarla ahora',
'Your personal information has been removed' => 'Su información personal ha sido eliminada',
'Your profile has been updated' => 'Su perfil ha sido actualizado',
'privacy policy' => '@@política de privacidad@@',
'privacy policy' => 'política de privacidad',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM, YYYY HH:mm}',
'{0} cannot be blank.' => '{0} no puede estar vacío.',
'Active' => '',
'Current' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Terminate all sessions' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'An email has been sent with instructions for resetting your password' => '@@Se ha enviado un correo electrónico con instrucciones para restablecer su contraseña@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@La autenticación de dos factores le protege del robo de credenciales@@',
];

View File

@ -109,6 +109,7 @@ return [
'Gravatar email' => 'Gravatari e-posti aadress',
'Hello' => 'Tere',
'Here you can download your personal data in a comma separated values format.' => 'Siit saad alla laadida sinuga seotud andmed CSV formaadis.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Nõusutn oma isikuandmete töötlemise ning küpsiste kasutamisega, et selle lehe kasutamiset hõlbustada. Lisainfot loe lehelt {privacyPolicy}.',
'If you already registered, sign in and connect this account on settings page' => 'Kui oled juba registreerunud, logi sisse ja ühenda see konto oma seadete lehel',
'If you cannot click the link, please try pasting the text into your browser' => 'Kui sa ei saa lingil klikkida, proovi see kleepida oma brausri aadressireale',
'If you did not make this request you can ignore this email' => 'Kui sa ei ole seda päringut tellinud, siis võid seda kirja ignoreerida',
@ -264,18 +265,29 @@ return [
'Your password has expired, you must change it now' => 'Sinu parool on aegunud, pead seda uuendama.',
'Your personal information has been removed' => 'Sinu isiklikud andmed on kustutatud',
'Your profile has been updated' => 'Sinu profiil on uuendatud',
'privacy policy' => 'privaatsuspoliitika',
'{0} cannot be blank.' => '{0} ei või olla tühi.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'Authentication rule class {0} can not be instantiated' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class must extend "yii\\rbac\\Rule".' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'VKontakte' => '',
'Yandex' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Nõusutn oma isikuandmete töötlemise ning küpsiste kasutamisega, et selle lehe kasutamiset hõlbustada. Lisainfot loe lehelt {privacyPolicy}.@@',
'privacy policy' => '@@privaatsuspoliitika@@',
];

View File

@ -17,55 +17,29 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '(تنظیم نشده)',
'A confirmation message has been sent to your new email address' => 'ایمیلی برای تایید به آدرس ایمیل جدید شما ارسال شد',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'ایمیلی حاوی لینک فعال سازی حساب کاربریتان برای شما ارسال شد ، لطفا بر روی لینک موجود در ایمیل کلیک کنید تا ثبت نام کامل شود.',
'A new confirmation link has been sent' => 'لینک فعال سازی جدیدی برای شما ارسال شد',
'A password will be generated automatically if not provided' => 'اگر رمز عبور را وارد نکنید یک رمز عبور تصادفی برای شما ساخته خواهد شد',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Account' => 'حساب کاربری',
'Account confirmation' => 'تایید حساب کاربری',
'Account details' => 'مشخصات حساب کاربری',
'Account details have been updated' => 'جزئیات حساب کاربری بروز شد',
'Account settings' => 'تنظیمات حساب کاربری',
'Already registered? Sign in!' => 'قبلاً ثبت نام کرده اید ؟ پس وارد شوید!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => 'در زمان پردازش درخواست شما خطایی رخ داد',
'Are you sure you want to block this user?' => 'آیا از مسدود کردن این کاربر اطمینان دارید ؟',
'Are you sure you want to confirm this user?' => 'آیا از تایید این کاربر اطمینان دارید؟',
'Are you sure you want to delete this user?' => 'آیا از حذف این کاربر اطمینان دارید؟',
'Are you sure you want to switch to this user for the rest of this Session?' => '',
'Are you sure you want to unblock this user?' => 'آیا از آزاد سازی این کاربر اطمینان دارید؟',
'Are you sure you wish the user to change their password at next login?' => '',
'Are you sure you wish to send a password recovery email to this user?' => '',
'Are you sure? Deleted user can not be restored' => 'مطمئن هستید؟ امکان بازیابی اکانت پاک شده وجود ندارد',
'Are you sure? There is no going back' => '',
'Assignments' => 'تکالیف',
'Assignments have been updated' => '',
'Auth item with such name already exists' => '',
'Authentication rule class {0} can not be instantiated' => '',
'Authorization item successfully created.' => '',
'Authorization item successfully removed.' => '',
'Authorization item successfully updated.' => '',
'Authorization rule has been added.' => '',
'Authorization rule has been removed.' => '',
'Authorization rule has been updated.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => '',
'Back to privacy settings' => '',
'Bio' => 'بیوگرافی',
'Block' => 'مسدود',
'Block status' => 'وضعیت انسداد',
'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'مسدود شده در تاریخ {0, date, MMMM dd, YYYY HH:mm}',
'Cancel' => '',
'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => '',
'Change your avatar at Gravatar.com' => 'نمایه خود را در Gavatar.com تغییر دهید',
'Children' => '',
'Class' => '',
'Close' => '',
'Complete password reset on {0}' => 'تنظیم مجدد رمز عبور را در {0} کامل کنید',
'Confirm' => 'تایید',
'Confirm account on {0}' => 'حساب کاربری را در {0} تایید کن',
@ -79,87 +53,48 @@ return [
'Continue' => 'ادامه',
'Create' => 'ایجاد کردن',
'Create a user account' => 'ایجاد حساب کاربری',
'Create new permission' => '',
'Create new role' => '',
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => 'مشخصات کاربری از طریق ایمیل به کاربر ارسال خواهد شد',
'Current password' => 'رمز عبور فعلی',
'Current password is not valid' => 'رمز عبور فعلی معتبر نیست',
'Data privacy' => '',
'Data processing consent' => '',
'Delete' => 'حذف کردن',
'Delete account' => '',
'Delete my account' => '',
'Delete personal data' => '',
'Deleted by GDPR request' => '',
'Description' => '',
'Didn\'t receive confirmation message?' => 'ایمیل فعال سازی را دریافت نکرده اید؟',
'Disable two factor authentication' => '',
'Disconnect' => 'قطع ارتباط',
'Don\'t have an account? Sign up!' => 'هنوز حساب کاربری ندارید؟ پس ثبت نام کنید!',
'Download my data' => '',
'Email' => 'ایمیل',
'Email (public)' => 'ایمیل (عمومی)',
'Enable' => '',
'Enable two factor authentication' => '',
'Error occurred while changing password' => 'در طول تغییر گذرواژه خطا رخ داد',
'Error occurred while confirming user' => 'در طول فعال سازی شناسه کاربری خطا رخ داد',
'Error occurred while deleting user' => 'در زمان حذف کاربر خطایی رخ داد',
'Error sending registration message to "{email}". Please try again later.' => '',
'Error sending welcome message to "{email}". Please try again later.' => '',
'Export my data' => '',
'Finish' => 'پایان',
'Force password change at next login' => '',
'Forgot password?' => 'رمز عبور خود را فراموش کرده اید؟',
'Gravatar email' => 'ایمیل گاواتار',
'Hello' => 'سلام',
'Here you can download your personal data in a comma separated values format.' => '',
'If you already registered, sign in and connect this account on settings page' => 'اگر شما قبلا ثبت نام کرده اید وارد شوید و این اکانت را در صفحه تنظیمات متصل کنید',
'If you cannot click the link, please try pasting the text into your browser' => 'اگر برای کلیک بر روی این اکانت مشکلی دارید لطفا آدرس را در مرورگر کپی کنید',
'If you did not make this request you can ignore this email' => 'اگر شما این ایمیل را درخواست نداده اید پس می توانید آن را نادیده بگیرید',
'Impersonate this user' => '',
'In order to complete your registration, please click the link below' => 'برای کامل کردن ثبت نام خود لطفا بر روی لینک زیر کلیک کنید',
'In order to complete your request, please click the link below' => 'برای کامل کردن درخواست خود لطفا بر روی لینک زیر کلیک کنید',
'In order to finish your registration, we need you to enter following fields' => '',
'Information' => 'اطلاعات',
'Invalid login or password' => 'نام کاربری یا رمز عبور نامعتبر است',
'Invalid or expired link' => 'لینک فعال سازی معتبر نیست یا منقضی شده است',
'Invalid password' => '',
'Invalid two factor authentication code' => '',
'Invalid value' => '',
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => 'عضو شده در {0, date}',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
'Location' => 'موقعیت',
'Login' => 'ورود',
'Logout' => 'خروج',
'Manage users' => 'مدیریت کاربران',
'Name' => 'نام',
'Networks' => 'شبکه ها',
'Never' => '',
'New email' => 'ایمیل جدید',
'New password' => 'رمز عبور جدید',
'New permission' => 'اجازه دسترسی جدید',
'New role' => 'نقش جدید',
'New rule' => '',
'New user' => 'کاربر جدید',
'Not blocked' => 'مسدود نشده',
'Not found' => '',
'Once you delete your account, there is no going back' => '',
'Once you have deleted your data, you will not longer be able to sign in with this account.' => '',
'Password' => 'رمز عبور',
'Password age' => '',
'Password has been changed' => 'رمز عبور تغییر پیدا کرد',
'Permissions' => 'اجازه دسترسی',
'Please be certain' => '',
'Please click the link below to complete your password reset' => 'لطفا برای کامل کردن روند بازیابی رمز عبور بر روی لینک زیر کلیک کنید',
'Please fix following errors:' => 'لطفا خطا های زیر را بر طرف کنید :',
'Privacy' => '',
'Privacy settings' => '',
'Profile' => 'پروفایل',
'Profile details' => 'مشخصات پروفایل',
'Profile details have been updated' => 'مشخصات پروفایل بروز شد',
@ -168,15 +103,141 @@ return [
'Recovery link is invalid or expired. Please try requesting a new one.' => 'ایمیل تنظیم مجدد رمز عبور معتبر نیست یا منقضی شده است. لطفا دوباره درخواست دهید تا ایمیل جدیدی برایتان ارسال شود.',
'Recovery message sent' => 'ایمیل تنظیم مجدد رمز عبور ارسال شد',
'Registration IP' => 'آدرس ای پی ثبت نام',
'Registration on this website is disabled' => '',
'Registration time' => 'تاریخ ثبت نام',
'Remember me next time' => 'دفعه بعد مرا به یاد بسپار',
'Request new confirmation message' => 'درخواست ایمیل فعال سازی جدید',
'Reset your password' => 'بازیابی رمز عبور',
'Roles' => 'نقش ها',
'Save' => 'ذخیره',
'Sign in' => 'ورود',
'Sign up' => 'ثبت نام',
'Something went wrong' => 'چیز اشتباهی رخ داد',
'Thank you for signing up on {0}' => 'با تشکر از ثبت نام شما در {0}',
'Thank you, registration is now complete.' => 'متشکریم ، ثبت نام شما کامل شد.',
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'لینک تایید معتبر نیست یا منقضی شده است. لطفا دوباره درخواست دهید تا ایمیل جدیدی برایتان ارسال شود.',
'This account has already been connected to another user' => 'این اکانت قبلا به حساب کاربری دیگری متصل شده است',
'This email address has already been taken' => 'این آدرس ایمیل قبلا ثبت شده است',
'This username has already been taken' => 'این نام کاربری قبلا ثبت شده است',
'Time zone' => 'موقعیت زمانی',
'Time zone is not valid' => 'موقعبت زمانی معتبر نیست',
'Unblock' => 'آزاد سازی',
'Unconfirmed' => 'تایید نشده',
'Update' => 'بروزرسانی',
'Update user account' => 'اکانت کاربر را بروز کنید',
'User has been confirmed' => 'کاربر تایید شد',
'User has been created' => 'کاربر ساخته شد',
'User has been deleted' => 'کاربر حذف شد',
'User is not found' => 'کاربر پیدا نشد',
'User not found.' => 'کاربر پیدا نشد.',
'Username' => 'نام کاربری',
'Users' => 'کاربرها',
'We have received a request to change the email address for your account on {0}' => 'ما درخواستی برای تغییر آدرس ایمیل اکانت شما در {0} دریافت کرده ایم',
'We have received a request to reset the password for your account on {0}' => 'ما درخواستی برای تنظیم مجدد رمز عبور برای حساب کاربری شما در {0} دریافت کردیم',
'Website' => 'وب سایت',
'Welcome to {0}' => 'خوش آمدید به {0}',
'Yandex' => 'یاندکس',
'You can assign multiple roles or permissions to user by using the form below' => 'شما می توانید نقش ها یا مجوز دسترسی های متعددی را از طریق فرم زیر به کاربر تخصیص دهید',
'You can connect multiple accounts to be able to log in using them' => 'شما می توانید حساب کاربری متعددی را برای اینکه بتوانید با آنها وارد شوید به سیستم متصل کنید',
'You need to confirm your email address' => 'شما باید ایمیل خود را تایید کنید',
'Your account details have been updated' => 'مشخصات حساب کاربری شما بروز شد',
'Your account has been blocked' => 'اکانت شما مسدود شده است',
'Your account has been blocked.' => 'اکانت شما مسدود شده است.',
'Your account has been connected' => 'حساب کاربری شما متصل شد',
'Your account has been created' => 'اکانت شما ساخته شد',
'Your account has been created and a message with further instructions has been sent to your email' => 'اکانت شما ساخته شد و ایمیلی حاوی دستورالعمل های بعدی به شما ارسال شد',
'Your account on {0} has been created' => 'حساب کاربری شما در {0} ساخته شد',
'Your confirmation token is invalid or expired' => 'لینک تایید شما معتبر نیست یا منقضی شده است',
'Your email address has been changed' => 'آدرس ایمیل شما تغییر کرد',
'Your profile has been updated' => 'پروفایل شما بروز شد',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM, YYYY HH:mm}',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Account' => '',
'Account confirmation' => '',
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Are you sure you want to switch to this user for the rest of this Session?' => '',
'Are you sure you wish the user to change their password at next login?' => '',
'Are you sure you wish to send a password recovery email to this user?' => '',
'Are you sure? There is no going back' => '',
'Assignments have been updated' => '',
'Auth item with such name already exists' => '',
'Authentication rule class {0} can not be instantiated' => '',
'Authorization item successfully created.' => '',
'Authorization item successfully removed.' => '',
'Authorization item successfully updated.' => '',
'Authorization rule has been added.' => '',
'Authorization rule has been removed.' => '',
'Authorization rule has been updated.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => '',
'Back to privacy settings' => '',
'Cancel' => '',
'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => '',
'Children' => '',
'Class' => '',
'Close' => '',
'Create new permission' => '',
'Create new role' => '',
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
'Data processing consent' => '',
'Delete account' => '',
'Delete my account' => '',
'Delete personal data' => '',
'Deleted by GDPR request' => '',
'Description' => '',
'Disable two factor authentication' => '',
'Download my data' => '',
'Enable' => '',
'Enable two factor authentication' => '',
'Error sending registration message to "{email}". Please try again later.' => '',
'Error sending welcome message to "{email}". Please try again later.' => '',
'Export my data' => '',
'Force password change at next login' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
'Impersonate this user' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
'Invalid password' => '',
'Invalid two factor authentication code' => '',
'Invalid value' => '',
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
'Never' => '',
'New rule' => '',
'Not found' => '',
'Once you delete your account, there is no going back' => '',
'Once you have deleted your data, you will not longer be able to sign in with this account.' => '',
'Password age' => '',
'Please be certain' => '',
'Privacy' => '',
'Privacy settings' => '',
'Registration on this website is disabled' => '',
'Required "key" cannot be empty.' => '',
'Required "secret" cannot be empty.' => '',
'Reset your password' => 'بازیابی رمز عبور',
'Role "{0}" not found. Creating it.' => '',
'Roles' => 'نقش ها',
'Rule' => '',
'Rule class must extend "yii\\rbac\\Rule".' => '',
'Rule class name' => '',
@ -185,29 +246,28 @@ return [
'Rule {0} does not exists' => '',
'Rule {0} not found.' => '',
'Rules' => '',
'Save' => 'ذخیره',
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Sign in' => 'ورود',
'Sign up' => 'ثبت نام',
'Something went wrong' => 'چیز اشتباهی رخ داد',
'Submit' => '',
'Switch identities is disabled.' => '',
'Thank you for signing up on {0}' => 'با تشکر از ثبت نام شما در {0}',
'Thank you, registration is now complete.' => 'متشکریم ، ثبت نام شما کامل شد.',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'لینک تایید معتبر نیست یا منقضی شده است. لطفا دوباره درخواست دهید تا ایمیل جدیدی برایتان ارسال شود.',
'The verification code is incorrect.' => '',
'There is neither role nor permission with name "{0}"' => '',
'There was an error in saving user' => '',
'This account has already been connected to another user' => 'این اکانت قبلا به حساب کاربری دیگری متصل شده است',
'This email address has already been taken' => 'این آدرس ایمیل قبلا ثبت شده است',
'This username has already been taken' => 'این نام کاربری قبلا ثبت شده است',
'This will disable two factor authentication. Are you sure?' => '',
'This will remove your personal data from this site. You will no longer be able to sign in.' => '',
'Time zone' => 'موقعیت زمانی',
'Time zone is not valid' => 'موقعبت زمانی معتبر نیست',
'Two Factor Authentication (2FA)' => '',
'Two factor authentication code' => '',
'Two factor authentication has been disabled.' => '',
@ -225,83 +285,32 @@ return [
'Unable to update authorization item.' => '',
'Unable to update authorization rule.' => '',
'Unable to update block status.' => '',
'Unblock' => 'آزاد سازی',
'Unconfirmed' => 'تایید نشده',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'Update' => 'بروزرسانی',
'Update assignments' => '',
'Update permission' => '',
'Update role' => '',
'Update rule' => '',
'Update user account' => 'اکانت کاربر را بروز کنید',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => 'کاربر تایید شد',
'User has been created' => 'کاربر ساخته شد',
'User has been deleted' => 'کاربر حذف شد',
'User is not found' => 'کاربر پیدا نشد',
'User not found.' => 'کاربر پیدا نشد.',
'User will be required to change password at next login' => '',
'Username' => 'نام کاربری',
'Users' => 'کاربرها',
'VKontakte' => '',
'Verification failed. Please, enter new code.' => '',
'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => '',
'We have generated a password for you' => '',
'We have received a request to change the email address for your account on {0}' => 'ما درخواستی برای تغییر آدرس ایمیل اکانت شما در {0} دریافت کرده ایم',
'We have received a request to reset the password for your account on {0}' => 'ما درخواستی برای تنظیم مجدد رمز عبور برای حساب کاربری شما در {0} دریافت کردیم',
'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => '',
'Website' => 'وب سایت',
'Welcome to {0}' => 'خوش آمدید به {0}',
'Yandex' => 'یاندکس',
'You are about to delete all your personal data from this site.' => '',
'You can assign multiple roles or permissions to user by using the form below' => 'شما می توانید نقش ها یا مجوز دسترسی های متعددی را از طریق فرم زیر به کاربر تخصیص دهید',
'You can connect multiple accounts to be able to log in using them' => 'شما می توانید حساب کاربری متعددی را برای اینکه بتوانید با آنها وارد شوید به سیستم متصل کنید',
'You cannot remove your own account' => '',
'You need to confirm your email address' => 'شما باید ایمیل خود را تایید کنید',
'Your account details have been updated' => 'مشخصات حساب کاربری شما بروز شد',
'Your account has been blocked' => 'اکانت شما مسدود شده است',
'Your account has been blocked.' => 'اکانت شما مسدود شده است.',
'Your account has been completely deleted' => '',
'Your account has been connected' => 'حساب کاربری شما متصل شد',
'Your account has been created' => 'اکانت شما ساخته شد',
'Your account has been created and a message with further instructions has been sent to your email' => 'اکانت شما ساخته شد و ایمیلی حاوی دستورالعمل های بعدی به شما ارسال شد',
'Your account on {0} has been created' => 'حساب کاربری شما در {0} ساخته شد',
'Your confirmation token is invalid or expired' => 'لینک تایید شما معتبر نیست یا منقضی شده است',
'Your consent is required to register' => '',
'Your consent is required to work with this site' => '',
'Your email address has been changed' => 'آدرس ایمیل شما تغییر کرد',
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => 'پروفایل شما بروز شد',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM, YYYY HH:mm}',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => 'ایمیلی حاوی راهنمایی برای تنظیم مجدد رمز عبور به شما ارسال شد',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => 'ای پی ثبت نام',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -110,6 +110,7 @@ return [
'Gravatar email' => 'Email gravatar',
'Hello' => 'Bonjour',
'Here you can download your personal data in a comma separated values format.' => 'Ici vous pouvez télécharger vos données personnelles dans un format avec les données séparées par des virgules',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'J\'accepte le traitement de mes données personnelles et l\'utilisation de cookies pour faciliter le fonctionnement de ce site. Pour plus d\'information, lisez notre {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Si vous êtes déjà inscrit, connectez-vous et liez ce compte dans la page des réglages',
'If you cannot click the link, please try pasting the text into your browser' => 'Si vous ne parvenez pas à cliquer sur le lien, veuillez essayer de coller le texte dans votre navigateur',
'If you did not make this request you can ignore this email' => 'Si vous n\'avez pas fait cette demande, vous pouvez ignorer cet email',
@ -268,14 +269,25 @@ return [
'Your password has expired, you must change it now' => 'Votre mot de passe a expiré, vous devez le renouveler maintenant',
'Your personal information has been removed' => 'Vos données personnelles ont été supprimées',
'Your profile has been updated' => 'Votre profil a été mis à jour',
'privacy policy' => 'politique de confidentialité',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM YYYY HH:mm}',
'{0} cannot be blank.' => '{0} ne peut être vide.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@J\'accepte le traitement de mes données personnelles et l\'utilisation de cookies pour faciliter le fonctionnement de ce site. Pour plus d\'information, lisez notre {privacyPolicy}@@',
'privacy policy' => '@@politique de confidentialité@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'IP' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -109,7 +109,7 @@ return [
'Gravatar email' => 'Gravatar e-mail',
'Hello' => 'Helló',
'Here you can download your personal data in a comma separated values format.' => 'Itt személyes adatait vesszővel elválasztott formátumban töltheti le.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Egyetértek személyes adataim feldolgozásával és cookie-k használatával a webhely működésének megkönnyítése érdekében. További információért olvassa el a {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Egyetértek személyes adataim feldolgozásával és cookie-k használatával a webhely működésének megkönnyítése érdekében. További információért olvassa el a {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Ha már regisztráltál, jelentkezz be és kösd be ezt a fiókot a beállítások oldalán',
'If you cannot click the link, please try pasting the text into your browser' => 'Ha nem tud kattintani a linkre, kérjük, próbálja meg a szöveg beillesztését a böngészőbe',
'If you did not make this request you can ignore this email' => 'Ha ezt a kérelmet nem hajtotta végre, figyelmen kívül hagyhatja ezt az e-mailt',
@ -265,27 +265,41 @@ return [
'Your password has expired, you must change it now' => 'A jelszava lejárt, most módosítania kell',
'Your personal information has been removed' => 'Személyes adatait eltávolítottuk',
'Your profile has been updated' => 'A profilja frissítve lett',
'privacy policy' => '@@Adatvédelmi irányelvek@@',
'privacy policy' => 'Adatvédelmi irányelvek',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, dátum, MMM dd, ÉÉÉÉ HH: mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, dátum, MMMM dd, ÉÉÉÉ HH: mm}',
'{0} cannot be blank.' => '{0} nem lehet üres.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@Üzenet érkezett az e-mail címedre.@@',
'An email has been sent with instructions for resetting your password' => '@@E-mailt küldtek a jelszó visszaállításával kapcsolatos utasításokkal@@',
'Awesome, almost there. ' => '@@Hurrá, majdnem kész.@@',
'Disable Two-Factor Auth' => '@@Letiltja a kétütemű hitelesítést@@',
'Enable Two-factor auth' => '@@Engedélyezze a kétütemű hitelesítést@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Aggregálom a személyes adataim feldolgozását és a cookie-k használatát a webhely működésének megkönnyítése érdekében. További információért olvassa el a {privacyPolicy}@@',
'Invalid two-factor code' => '@@Érvénytelen kétütemű kód@@',
'Last login' => '@@Utolsó bejelentkezés@@',
'Now you can resume the login process' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@Ez letiltja a kétütemű hitelesítést. biztos vagy ebben?@@',
'Two Factor Authentication' => '@@Két tényező hitelesítés@@',
'Two factor authentication protects you against stolen credentials' => '@@Két tényező-hitelesítés megvédi az ellopott hitelesítő adatokat@@',

View File

@ -22,12 +22,14 @@ return [
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'È stato inviato un messaggio al tuo indirizzo email. Contiene un collegamento di verifica che devi aprire per completare la registrazione.',
'A new confirmation link has been sent' => 'È stato inviato un nuovo link di conferma',
'A password will be generated automatically if not provided' => 'La password verrà generata automaticamente se non fornita',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'Come descritto nel Regolamento Europeo per la Protezione dei Dati (GDPR), è necessario il tuo consenso per l\'utilizzo dei dati personali.',
'Account' => 'Account',
'Account confirmation' => 'Conferma account',
'Account details' => 'Dettagli account',
'Account details have been updated' => 'I dettagli del tuo account sono stati aggiornati',
'Account settings' => 'Impostazioni account',
'Already registered? Sign in!' => 'Già registrato? Accedi!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Una mail con le istruzioni per creare una nuova password è stata inviata all\'indirizzo {email} se associato a un account {appName}. La tua password non è ancora stata cambiata.',
'An error occurred processing your request' => 'Si è verificato un errore durante l\'elaborazione della richiesta',
'Are you sure you want to block this user?' => 'Sicuro di voler bloccare questo utente?',
'Are you sure you want to confirm this user?' => 'Sicuro di voler confermare questo utente?',
@ -81,6 +83,7 @@ return [
'Credentials will be sent to the user by email' => 'Le credenziali verranno inviate all\'utente via email',
'Current password' => 'Password attuale',
'Current password is not valid' => 'La password attuale non è valida',
'Data privacy' => 'Data privacy',
'Data processing consent' => 'Consenso al trattamento dei dati',
'Delete' => 'Elimina',
'Delete account' => 'Elimina account',
@ -109,7 +112,7 @@ return [
'Gravatar email' => 'Email di Gravatar',
'Hello' => 'Ciao',
'Here you can download your personal data in a comma separated values format.' => 'Da qui puoi scaricare i tuoi dati in formato CSV.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Consento al trattamento dei miei dati personali e all\'uso dei cookie per agevolare le attività di questo sito. Per ulteriori informazioni leggere la nostra {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Consento al trattamento dei miei dati personali e all\'uso dei cookie per agevolare le attività di questo sito. Per ulteriori informazioni leggere la nostra {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Se sei già registrato accedi e collega questo account nella pagina delle impostazioni',
'If you cannot click the link, please try pasting the text into your browser' => 'Se non puoi fare click sul link prova a copiare ed incollare il testo nel browser',
'If you did not make this request you can ignore this email' => 'Se non hai effettuato tu la richiesta puoi ignorare questa email',
@ -187,6 +190,7 @@ return [
'Sign in' => 'Accedi',
'Sign up' => 'Registrati',
'Something went wrong' => 'È successo qualcosa di strano',
'Submit' => 'Invia',
'Switch identities is disabled.' => 'Il cambio identità è disabilitato',
'Thank you for signing up on {0}' => 'Grazie per esserti registrato su {0}',
'Thank you, registration is now complete.' => 'Grazie, la tua registrazione è completa.',
@ -205,7 +209,7 @@ return [
'Two Factor Authentication (2FA)' => 'Autenticazione a due fattori (2FA)',
'Two factor authentication code' => 'Codice di autenticazione a due fattori',
'Two factor authentication has been disabled.' => 'Autenticazione a due fattori disabilitata.',
'Two factor authentication protects you in case of stolen credentials' => 'L\'autenticazione a due fattura ti protegge in caso di furto di credenziali',
'Two factor authentication protects you in case of stolen credentials' => 'L\'autenticazione a due fattori ti protegge in caso di furto di credenziali',
'Two factor authentication successfully enabled.' => 'Autenticazione a due fattori abilitata con successo.',
'Unable to confirm user. Please, try again.' => 'Impossibile confermare l\'utente, per favore ritenta.',
'Unable to create an account.' => 'Impossibile creare l\'account.',
@ -221,6 +225,7 @@ return [
'Unable to update block status.' => 'Impossibile aggiornare lo stato di blocco.',
'Unblock' => 'Sblocca',
'Unconfirmed' => 'Non confermato',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Siamo spiacenti è richiesto il consenso all\'utilizzo dei dati personali per navigare sul sito.',
'Update' => 'Modifica',
'Update assignments' => 'Modifica assegnamenti',
'Update permission' => 'Modifica permessi',
@ -264,19 +269,34 @@ return [
'Your account on {0} has been created' => 'Il tuo account presso {0} è stato creato',
'Your confirmation token is invalid or expired' => 'Il token di conferma non è valido o è scaduto',
'Your consent is required to register' => 'È richiesto il tuo consenso per la registrazione',
'Your consent is required to work with this site' => 'È richiesto il tuo consenso per navigare sul sito',
'Your email address has been changed' => 'Il tuo indirizzo email è stato cambiato',
'Your password has expired, you must change it now' => 'La tua password è scaduta, devi cambiarla',
'Your personal information has been removed' => 'I tuoi dati personali sono stati rimossi',
'Your profile has been updated' => 'Il tuo profilo è stato aggiornato',
'privacy policy' => '@@politica della privacy@@',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => 'Il tuo ruolo richiede l\'autenticazione a due fattori, non potrai usare l\'applicazione finché non l\'avrai abilitata',
'privacy policy' => 'politica della privacy',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM YYYY HH:mm}',
'{0} cannot be blank.' => '{0} non può essere vuoto.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => 'Come descritto nel Regolamento Europeo per la Protezione dei Dati (GDPR), è necessario il tuo consenso per l\'utilizzo dei dati personali.',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Una mail con le istruzioni per creare una nuova password è stata inviata all\'indirizzo {email} se associato a un account {appName}. La tua password non è ancora stata cambiata.',
'Data privacy' => 'Data privacy',
'Submit' => 'Invia',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => 'Siamo spiacenti è richiesto il consenso all\'utilizzo dei dati personali per navigare sul sito.',
'Your consent is required to work with this site' => 'È richiesto il tuo consenso per navigare sul sito',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'An email has been sent with instructions for resetting your password' => '@@È stata inviata un\'email con le istruzioni per azzerare la tua password@@',
'Now you can resume the login process' => '@@Ora puoi riprendere il processo di autenticazione@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'IP' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -109,7 +109,7 @@ return [
'Gravatar email' => 'Gravatar email',
'Hello' => 'Hallo',
'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke data downloaden in een komma\'s gescheiden formaat.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Ik ga akkoord met het verwerken van mijn persoonlijke data en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees onze {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ik ga akkoord met het verwerken van mijn persoonlijke data en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees onze {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Als je reeds geregistreerd bent, meldt je aan en verbind deze account via de instellingen pagina',
'If you cannot click the link, please try pasting the text into your browser' => 'Als je niet op deze link kan klikken, kopieer en plak de tekst in jouw browser',
'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet deed mag je deze email negeren',
@ -265,30 +265,44 @@ return [
'Your password has expired, you must change it now' => 'Jouw wachtwoord is vervallen. Gelieve het onmiddelijk te wijzigen',
'Your personal information has been removed' => 'Jouw persoonlijke gegevens werden verwijderd',
'Your profile has been updated' => 'Jouw profiel werd geupdate',
'privacy policy' => '@@privacy policy@@',
'privacy policy' => 'privacy policy',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}\'',
'{0} cannot be blank.' => '{0} kan niet leeg zijn.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@Een bericht werd naar jouw emailadres verzonden@@',
'An email has been sent with instructions for resetting your password' => '@@Er werd een email verstuurd met instructies om jouw wachtwoord te resetten@@',
'Awesome, almost there. ' => '@@Super, bijna klaar.@@',
'Class "{0}" does not exist' => '@@Class "{0} bestaat niet@@',
'Disable Two-Factor Auth' => '@@Tweetraps authenticatie uitschakelen@@',
'Enable Two-factor auth' => '@@Tweetraps authenticatie inschakelen@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Ik ga akkoord dat mijn persoonlijke data en cookies worden verwerkt voor het gebruik van deze website. Voor meer informatie lees onze {privacyPolicy}@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Ik ga akkoord dat mijn persoonlijke data en cookies worden verwerkt voor het gebruik van deze website. Voor meer informatie lees onze {privacyPolicy}@@',
'Invalid two-factor code' => '@@Ongeldige tweetraps authenticatie code@@',
'Last login' => '@@Laatste login@@',
'Now you can resume the login process' => '@@@@',
'Registration ip' => '@@Registratie IP@@',
'Rule class can not be instantiated' => '@@Registratie IP@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@Regel klasse moet worden uitgebreid met "yii\\rbac\\Rule"@@',

View File

@ -1,297 +0,0 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'(not set)' => '-',
'A confirmation message has been sent to your new email address' => 'Een bevestigingsbericht is verzonden naar je nieuwe e-mailadres',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => 'Een email met een bevestigingslink werd verzonden naar je emailadres. Klik op de link om de registratie te voltooien.',
'A new confirmation link has been sent' => 'Een nieuwe bevestigingslink is verzonden',
'A password will be generated automatically if not provided' => 'Een wachtwoord wordt automatisch gegenereerd als er dit niet wordt opgegeven',
'Account' => 'Account',
'Account confirmation' => 'Accountbevestiging',
'Account details' => 'Accountdetails',
'Account details have been updated' => 'Accountdetails werden bijgewerkt',
'Account settings' => 'Account-instellingen',
'Already registered? Sign in!' => 'AL geregistreerd? Log in!',
'An email has been sent with instructions for resetting your password' => 'Er is een email verstuurd met instructies om je wachtwoord te herstellen',
'An error occurred processing your request' => 'Er is een fout opgetreden bij het verwerken van je aanvraag',
'Are you sure you want to block this user?' => 'Weet je zeker dat je deze gebruiker wil blokkeren?',
'Are you sure you want to confirm this user?' => 'Weet je zeker dat je deze gebruiker wil bevestigen?',
'Are you sure you want to delete this user?' => 'Wet je zeker dat je deze gebrukiker wil verwijderen?',
'Are you sure you want to switch to this user for the rest of this Session?' => 'Weet je zeker dat je als deze gebruiker wil verder gaan voor deze sessie?',
'Are you sure you want to unblock this user?' => 'Weet je zeker dat je deze gebruiker wil activeren?',
'Are you sure you wish the user to change their password at next login?' => 'Weet je zeker dat de gebruiker zijn wachtwoord moet wijzigen bij de volgende keer dat deze inlogt?',
'Are you sure you wish to send a password recovery email to this user?' => 'Weet je zeker dat je een wachtwoord herstel-email naar deze gebruiker wil verzenden?',
'Are you sure? Deleted user can not be restored' => 'Weet je het zeker? Een verwijderde gebruiker kan niet worden hersteld!',
'Are you sure? There is no going back' => 'Weet je het zeker? Dit kan niet ongedaan gemaakt worden!',
'Assignments' => 'Toewijzingen',
'Assignments have been updated' => 'Toewijzingen zijn bijgewerkt',
'Auth item with such name already exists' => 'Auth item met deze naam bestaat al',
'Authentication rule class {0} can not be instantiated' => 'Authenticatie regel klasse {0} kan niet worden geïnstantieerd',
'Authorization item successfully created.' => 'Authorisatie item met succes aangemaakt',
'Authorization item successfully removed.' => 'Authorisatie item met succes verwijderd',
'Authorization item successfully updated.' => 'Authorisatie item met succes geüpdatet',
'Authorization rule has been added.' => 'Authorisatie regel werd toegevoegd',
'Authorization rule has been removed.' => 'Authorisatie regel werd verwijderd',
'Authorization rule has been updated.' => 'Authorisatie regel werd geüpdatet',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Super, bijna klaar. Open alleen nog de bevestigingslink in de mail die naar jouw nieuwe emailadres gestuurd is',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Super, bijna klaar. Open alleen nog de bevestigingslink in de mail die naar jouw oude emailadres gestuurd is',
'Back to privacy settings' => 'Terug naar privcay settings',
'Bio' => 'Biografie',
'Block' => 'Blokkeer',
'Block status' => 'Blokkering',
'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Geblokkeerd op {0, date, MMMM dd, YYYY HH:mm}',
'Cancel' => 'Annuleren',
'Cannot assign role \'{0}\' as the AuthManager is not configured on your console application.' => 'Kan rol {0} niet toewijzen doordat de AuthManager niet geconfigureerd is op de console-applicatie',
'Change your avatar at Gravatar.com' => 'Wijzig je avatar op Gravatar.com',
'Children' => 'Kinderen',
'Class' => 'Klasse',
'Close' => 'Sluiten',
'Complete password reset on {0}' => 'Voltooi het herstellen van je wachtwoord op {0}',
'Confirm' => 'Bevestig',
'Confirm account on {0}' => 'Bevestig account op {0}',
'Confirm email change on {0}' => 'Bevestig email-wijziging op {0}',
'Confirmation' => 'Bevestiging',
'Confirmation status' => 'Bevestigingsstatus',
'Confirmation time' => 'Tijdstip bevestiging',
'Confirmed' => 'Bevestigd',
'Confirmed at {0, date, MMMM dd, YYYY HH:mm}' => 'Bevestigd op {0, date, MMMM dd, YYYY HH:mm}',
'Connect' => 'Verbinden',
'Continue' => 'Verder',
'Create' => 'Maak aan',
'Create a user account' => 'Maak een gebruikersaccount aan',
'Create new permission' => 'Maak een nieuwe permissie aan',
'Create new role' => 'Maak een nieuw rol aan',
'Create new rule' => 'maak een nieuwe regel aan',
'Created at' => 'Gemaakt op',
'Credentials will be sent to the user by email' => 'Inloggevens worden via mail naar de gebruiker verzonden',
'Current password' => 'Huidig wachtwoord',
'Current password is not valid' => 'Huidig wachtwoord is niet geldig',
'Data processing consent' => 'Toestemming gegevensverwerking',
'Delete' => 'Verwijder',
'Delete account' => 'Verwijder account',
'Delete my account' => 'Verwijder mijn account',
'Delete personal data' => 'Verwijder mijn persoonlijke gegevens',
'Deleted by GDPR request' => 'Verwijderd vanwege mijn AVG verzoek',
'Description' => 'Omschrijving',
'Didn\'t receive confirmation message?' => 'Geen bevestigings-email ontvangen?',
'Disable two factor authentication' => '2 traps authenticatie uitschakelen',
'Disconnect' => 'Verbreek verbindig',
'Don\'t have an account? Sign up!' => 'Geen account? Meld je aan',
'Download my data' => 'Download mijn gegevens',
'Email' => 'Email',
'Email (public)' => 'Email (publiek)',
'Enable' => 'Schakel in',
'Enable two factor authentication' => 'Schakel 2 traps authenticatie in',
'Error occurred while changing password' => 'Fout bij wijzigen van het wachtwoord',
'Error occurred while confirming user' => 'Fout bij bevestigen van de gebruiker',
'Error occurred while deleting user' => 'Fout bij verwijderen van de gebruiker',
'Error sending registration message to \'{email}\'. Please try again later.' => 'Er is een fout opgetreden bij verzenden van de registratie-email naar \'{email}\'. Probeer later nog eens.',
'Error sending welcome message to \'{email}\'. Please try again later.' => 'Er is een fout opgetreden bij verzenden van de welkomst-email naar \'{email}\'. Probeer later nog eens.',
'Export my data' => 'Exporteer mijn gegevens',
'Finish' => 'beëindig',
'Force password change at next login' => 'Forceer wachtwoord-herstel bij volgende login',
'Forgot password?' => 'Wachtwoord vergeten?',
'Gravatar email' => 'Gravatar email',
'Hello' => 'Hallo',
'Here you can download your personal data in a comma separated values format.' => 'Hier kan je al jouw persoonlijke data downloaden in een komma-gescheiden formaat.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Ik ga akkoord met het verwerken van mijn persoonlijke data en het gebruik van cookies om de werking van deze website te vergemakkelijken. Voor meer, lees onze {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Als je al geregistreerd bent, meldt je aan en verbind deze account via de instellingen pagina',
'If you cannot click the link, please try pasting the text into your browser' => 'Kopieer en plak deze tekst in jouw browser als je niet op deze link kan klikken',
'If you did not make this request you can ignore this email' => 'Als je deze aanvraag niet hebt gedaan kan je deze email negeren',
'Impersonate this user' => 'Ga verder als deze gebruiker',
'In order to complete your registration, please click the link below' => 'Klik op onderstaande link om je registratie te voltooien',
'In order to complete your request, please click the link below' => 'Klik op onderstaande link om je registratie te voltooien',
'In order to finish your registration, we need you to enter following fields' => 'De volgende velden moeten verplicht worden ingevuld voor je registrate',
'Information' => 'Informatie',
'Invalid login or password' => 'Ongeldige login of wachtwoord',
'Invalid or expired link' => 'Ongeldige of vervallen link',
'Invalid password' => 'Ongeldig wachtwoord',
'Invalid two factor authentication code' => 'Ongeldige 2 traps authenticatie code',
'Invalid value' => 'Ongeldige waarde',
'It will be deleted forever' => 'Het zal voor altijd verwijderd worden',
'Items' => 'Items',
'Joined on {0, date}' => 'Aangemeld op {0, date}',
'Last login IP' => 'Laatste login IP',
'Last login time' => 'Laatste login',
'Last password change' => 'Laatste wachtwoordwijziging',
'Location' => 'Locatie',
'Login' => 'Log in',
'Logout' => 'Log uit',
'Manage users' => 'Beheer gebruikers',
'Name' => 'Naam',
'Networks' => 'Netwerken',
'Never' => 'Nooit',
'New email' => 'Nieuwe email',
'New password' => 'Nieuw wachtwoord',
'New permission' => 'Nieuwe permissies',
'New role' => 'Nieuwe rol',
'New rule' => 'Nieuwe regel',
'New user' => 'Nieuwe gebruiker',
'Not blocked' => 'Niet geblokkeerd',
'Not found' => 'Niet gevonden',
'Once you delete your account, there is no going back' => 'Als je jouw account verwijdert kan dit niet ongedaan gemaakt worden',
'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Als je jouw data verwijdert is inloggen met deze account niet meer mogelijk.',
'Password' => 'Wachtwoord',
'Password age' => 'Ouderdeom wachtwoord',
'Password has been changed' => 'Wachtwoord is gewijzigd',
'Permissions' => 'Machtigingen',
'Please be certain' => 'Weet je het zeker?',
'Please click the link below to complete your password reset' => 'Klik op onderstaande link om je wachtwoordherstel te voltooien',
'Please fix following errors:' => 'Los de volgende fouten op:',
'Privacy' => 'Privacy',
'Privacy settings' => 'Privacy-instellingen',
'Profile' => 'Profiel',
'Profile details' => 'Profieldetails',
'Profile details have been updated' => 'Profieldetails werden geüpdatet',
'Profile settings' => 'Profiel-instellingen',
'Recover your password' => 'Herstel je wachtwoord',
'Recovery link is invalid or expired. Please try requesting a new one.' => 'Herstel-link is ongeldig of vervallen. Vraag een nieuwe aan',
'Recovery message sent' => 'Herstelbericht is verzonden',
'Registration IP' => 'Registratie IP',
'Registration on this website is disabled' => 'Registratie is gedeactiveerd op deze website',
'Registration time' => 'Registratietijdstip',
'Remember me next time' => 'Onthoud mij',
'Request new confirmation message' => 'Vraag een nieuw bevestigingsbericht aan',
'Required \'key\' cannot be empty.' => 'Verplicht veld \'key\' kan niet leeg zijn.',
'Required \'secret\' cannot be empty.' => 'Verplicht veld \'geheim\' kan niet leeg zijn.',
'Reset your password' => 'Reset jouw wachtwoord',
'Role \'{0}\' not found. Creating it.' => 'Rol \'{0}\' kan niet worden gevonden. Het wordt aangemaakt',
'Roles' => 'Rollen',
'Rule' => 'Regel',
'Rule class must extend \'yii\rbac\Rule\'.' => 'Regel class moet \'yii\rbac\Rule\' extenden.',
'Rule name' => 'Regel naam',
'Rule name {0} is already in use' => 'Regel met naam \'{0}\' is al in gebruik',
'Rule {0} does not exists' => 'Regel {0} bestaat niet',
'Rule {0} not found.' => 'Regel {0} werd niet gevonden',
'Rules' => 'Regels',
'Save' => 'Opslaan',
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Scan de QR coe met Google Authenticator (of vergelijkbare app), voer de tijdelijke code in en klik op verzenden.',
'Send password recovery email' => 'Verzend wachtwoord herstel-email',
'Sign in' => 'Aanmelden',
'Sign up' => 'Registreren',
'Something went wrong' => 'Er ging iets mis',
'Switch identities is disabled.' => 'Identiteit-wisselen is niet ingeschakeld',
'Thank you for signing up on {0}' => 'Bedankt voor je registratie op {0}',
'Thank you, registration is now complete.' => 'Bedankt, je registratie is voltooid.',
'The \'recaptcha\' component must be configured.' => 'De \'recaptcha\' component moet worden geconfigureerd.',
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'De bevestigingslink is ongeldig of verlopen. Vraag een nieuwe aan.',
'The verification code is incorrect.' => 'De bevestigingscode is ongeldig',
'There is neither role nor permission with name \'{0}\'' => 'Er is geen rol of machtiging met de naam \'{0}\'',
'There was an error in saving user' => 'Er was een fout bij het opslaan van de gebruiker',
'This account has already been connected to another user' => 'Dit account is al verbonden met een andere gebruiker',
'This email address has already been taken' => 'Dit emailadres is al in gebruik',
'This username has already been taken' => 'Deze gebruikersnaam is al in gebruik',
'This will disable two factor authentication. Are you sure?' => 'Dit zal de 2 traps authenticatie uitschakelen. Ben je zeker?',
'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Dit zal jouw persoonlijke data van de website wissen. Je zal niet langer kunnen inloggen.',
'Time zone' => 'Tijdzone',
'Time zone is not valid' => 'Tijdzone is niet geldig',
'Two Factor Authentication (2FA)' => '2 traps authenticatie (2FA)',
'Two factor authentication code' => '2 traps authenticatie code',
'Two factor authentication has been disabled.' => '2 traps authenticatie is uitgeschakeld',
'Two factor authentication protects you against stolen credentials' => '2 traps authenticatie beschermt je tegen gestolen inloggegevens',
'Two factor authentication successfully enabled.' => '2 traps authenticatie met succes ingeschakeld',
'Unable to confirm user. Please, try again.' => 'Kan de gebruiker niet bevestigen. Probeer opnieuw.',
'Unable to create an account.' => 'Kan geen account aanmaken.',
'Unable to create authorization item.' => 'Kan geen authorisatie-item aanmaken',
'Unable to create new authorization rule.' => 'Kan geen authorisatieregel aanmaken',
'Unable to delete user. Please, try again later.' => 'Kan de gebruiker niet wissen. Probeer later opnieuw.',
'Unable to disable Two factor authentication.' => 'Kan de 2 traps authenticatie niet uitschakelen.',
'Unable to remove authorization item.' => 'Kan het authorisatie item niet wissen.',
'Unable to send confirmation link' => 'Kan de bevestigingsmail niet versturen',
'Unable to send recovery message to the user' => 'Kan de herstel-mail niet naar de gebruiker versturen',
'Unable to update authorization item.' => 'Kan het authorisatie-item niet aanpassen.',
'Unable to update authorization rule.' => 'Kan de authorisatieregel niet aanpassen.',
'Unable to update block status.' => 'Kan de geblokkeerstatus niet aanpassen',
'Unblock' => 'Maak actief',
'Unconfirmed' => 'Niet bevestigd',
'Update' => 'Update',
'Update assignments' => 'Update toewijzingen',
'Update permission' => 'Update machtigingen',
'Update role' => 'Update rol',
'Update rule' => 'Update regel',
'Update user account' => 'Update gebruikersaccount',
'Updated at' => 'geüpdatet op',
'User account could not be created.' => 'Gebruikers-account kan niet worden aangemaakt.',
'User block status has been updated.' => 'Blokkering gebruiker is aangepast.',
'User could not be registered.' => 'Gebruiker kan niet worden geregistreerd.',
'User has been confirmed' => 'Gebruiker is bevestigd',
'User has been created' => 'Gebruiker is aangemaakt',
'User has been deleted' => 'Gebruiker is verwijderd',
'User is not found' => 'Gebruiker niet gevonden',
'User not found.' => 'Gebruiker niet gevonden',
'User will be required to change password at next login' => 'Gebruiker zal verplicht worden zijn wachtwoord aan te passen bij volgende login',
'Username' => 'Gebruikersnaam',
'Users' => 'Gebruikers',
'VKontakte' => 'VKontakte',
'Verification failed. Please, enter new code.' => 'Bevestiging mislukt. Geef een nieuwe code op.',
'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'Het was niet mogelijk een email te sturen om je adres te bevestigen. Controleer het email-adres en controleer of het niet al bevestigd is.',
'We have generated a password for you' => 'Er is een wachtwoord voor je ingesteld',
'We have received a request to change the email address for your account on {0}' => 'We ontvingen een aanvraag om het email-adres te wijzigen voor je account op {0}',
'We have received a request to reset the password for your account on {0}' => 'Wij ontvingen een aanvraag om je wachtwoord te herstellen voor je account op {0}',
'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'Er is een bevestigingslink naar zowel je oude als je nieuwe email adres gestuurd. Je moet beiden links openen om de aanvraag te voltooien.',
'Website' => 'Website',
'Welcome to {0}' => 'Welkom bij {0}',
'Yandex' => 'Yandex',
'You are about to delete all your personal data from this site.' => 'Je staat op het punt om al je persoonlijke gegevens te wissen van deze website',
'You can assign multiple roles or permissions to user by using the form below' => 'Je kan meerdere rollen of machtigingen toewijzen aan de gebruiker doormiddel van onderstaand formulier',
'You can connect multiple accounts to be able to log in using them' => 'Je kan meerdere accounts verbinden om met deze accounts in te loggen',
'You cannot remove your own account' => 'Je kan je eigen account niet verwijderen.',
'You need to confirm your email address' => 'Je moet je email-adres nog bevestigen',
'Your account details have been updated' => 'Je account-details werden bijgewerkt',
'Your account has been blocked' => 'Je account is geblokkeerd',
'Your account has been blocked.' => 'Je account is geblokkeerd.',
'Your account has been completely deleted' => 'Je account is volledig verwijderd',
'Your account has been connected' => 'Je account is verbonden',
'Your account has been created' => 'Je account is aangemaakt',
'Your account has been created and a message with further instructions has been sent to your email' => 'Je account is aangemaakt en een bericht met verdere instructies is naar je e-mailadres verzonden',
'Your account on {0} has been created' => 'Je account op {0} is aangemaakt',
'Your confirmation token is invalid or expired' => 'Je bevestigingscode is ongeldig of verlopen',
'Your consent is required to register' => 'Je moet akkoord gaan met je toestemming om te registreren',
'Your email address has been changed' => 'Je email adres werd gewijzigd',
'Your password has expired, you must change it now' => 'Je wachtwoord is verlopen. Het moet nu gewijzigd worden',
'Your personal information has been removed' => 'Je persoonlijke gegevens zijn verwijderd',
'Your profile has been updated' => 'Je profiel is bijgewerkt',
'privacy policy' => 'privacy policy',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM, YYYY HH:mm}',
'{0} cannot be blank.' => '{0} kan niet leeg zijn.',
'A message has been sent to your email address. ' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class \'{0}\' does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend \'yii\rbac\Rule\'' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
];

View File

@ -91,7 +91,7 @@ return [
'Didn\'t receive confirmation message?' => 'Nie otrzymałeś emaila aktywacyjnego?',
'Disable two factor authentication' => 'Wyłącz uwierzytelnianie dwuetapowe',
'Disconnect' => 'Odłącz',
'Don\'t have an account? Sign up!' => 'Nie masz jeszcze konto? Zarejestruj się!',
'Don\'t have an account? Sign up!' => 'Nie masz jeszcze konta? Zarejestruj się!',
'Download my data' => 'Pobierz swoje dane',
'Email' => 'Email',
'Email (public)' => 'Email (publiczny)',
@ -109,7 +109,7 @@ return [
'Gravatar email' => 'Email z Gravatara',
'Hello' => 'Witaj',
'Here you can download your personal data in a comma separated values format.' => 'Tutaj możesz pobrać swoje dane osobowe w formacie CSV.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Zgadzam się na przetwarzanie moich danych osobowych i na użycie cookies w celu zapewnienia możliwości poprawnego działania tego serwisu. Aby dowiedzieć się więcej na ten temat, zapoznaj się z naszą {privacyPolicy}.@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Zgadzam się na przetwarzanie moich danych osobowych i na użycie cookies w celu zapewnienia możliwości poprawnego działania tego serwisu. Aby dowiedzieć się więcej na ten temat, zapoznaj się z naszą {privacyPolicy}.',
'If you already registered, sign in and connect this account on settings page' => 'Jeśli jesteś już zarejestrowany, zaloguj się i podłącz to konto na stronie ustawień',
'If you cannot click the link, please try pasting the text into your browser' => 'Jeśli kliknięcie w link nie działa, spróbuj skopiować go i wkleić w pasku adresu przeglądarki',
'If you did not make this request you can ignore this email' => 'Jeśli nie jesteś autorem tego żądania, prosimy o zignorowanie emaila.',
@ -265,27 +265,38 @@ return [
'Your password has expired, you must change it now' => 'Twoje hasło zostało zdezaktualizowane, musisz je teraz zmienić',
'Your personal information has been removed' => 'Twoje dane osobowe zostały usunięte',
'Your profile has been updated' => 'Twój profil został zaktualizowany',
'privacy policy' => '@@polityką prywatności@@',
'privacy policy' => 'polityką prywatności',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, dd MMM YYYY, HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd MMMM YYYY, HH:mm}',
'{0} cannot be blank.' => '{0} nie może pozostać bez wartości',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'An email has been sent with instructions for resetting your password' => '@@Email z instrukcją resetowania hasła został wysłany@@',
'Disable Two-Factor Auth' => '@@Wyłącz uwierzytelnianie dwuetapowe@@',
'Enable Two-factor auth' => '@@Włącz uwierzytelnianie dwuetapowe@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Invalid two-factor code' => '@@Nieprawidłowy kod uwierzytelniania dwuetapowego@@',
'Last login' => '@@Data ostatniego logowania@@',
'Now you can resume the login process' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@To wyłączy uwierzytelnianie dwuetapowe. Czy jesteś pewny?@@',
'Two Factor Authentication' => '@@Uwierzytelnianie dwuetapowe@@',
'Two factor authentication protects you against stolen credentials' => '@@Uwierzytelnianie dwuetapowe chroni Cię przed kradzieżą danych logowania@@',

View File

@ -109,7 +109,7 @@ return [
'Gravatar email' => 'E-mail do Gravatar',
'Hello' => 'Olá',
'Here you can download your personal data in a comma separated values format.' => 'Aqui você pode baixar seus dados pessoais em um formato de valores separados por vírgulas.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Concordo com o processamento de meus dados pessoais e o uso de cookies para facilitar a operação deste site. Para mais informações, leia nossa {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Concordo com o processamento de meus dados pessoais e o uso de cookies para facilitar a operação deste site. Para mais informações, leia nossa {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Se você já se registrou, faça login e conecte esta conta na página de configurações',
'If you cannot click the link, please try pasting the text into your browser' => 'Se você não pode clicar no link, tente colar o texto em seu navegador',
'If you did not make this request you can ignore this email' => 'Se você não fez essa solicitação, ignore este e-mail',
@ -265,30 +265,44 @@ return [
'Your password has expired, you must change it now' => 'Sua senha expirou, você deve alterá-la agora',
'Your personal information has been removed' => 'Suas informações pessoais foram removidas',
'Your profile has been updated' => 'Seu perfil foi atualizado',
'privacy policy' => '@@política de Privacidade@@',
'privacy policy' => 'política de Privacidade',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, MMM dd, YYYY HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}',
'{0} cannot be blank.' => '{0} não pode estar em branco',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@Uma mensagem foi enviada para o seu endereço de e-mail.@@',
'An email has been sent with instructions for resetting your password' => '@@Um e-mail foi enviado com instruções para redefinir sua senha@@',
'Awesome, almost there. ' => '@@Incrível, quase lá.@@',
'Class "{0}" does not exist' => '@@A classe "{0}" não existe@@',
'Disable Two-Factor Auth' => '@@Desabilitar autenticação em dois fatores@@',
'Enable Two-factor auth' => '@@Habilitar autenticação em dois fatores@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Concordo com o processamento de meus dados pessoais e o uso de cookies para facilitar a operação deste site. Para mais informações, leia nosso {privacyPolicy}@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Concordo com o processamento de meus dados pessoais e o uso de cookies para facilitar a operação deste site. Para mais informações, leia nosso {privacyPolicy}@@',
'Invalid two-factor code' => '@@Código de dois fatores inválido@@',
'Last login' => '@@Último login@@',
'Now you can resume the login process' => '@@@@',
'Registration ip' => '@@IP de registro@@',
'Rule class can not be instantiated' => '@@A classe de regras não pode ser instanciada@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@A classe de regras deve estender de "yii\\rbac\\Rule"@@',

View File

@ -103,7 +103,7 @@ return [
'Forgot password?' => 'Esqueceu a sua senha?',
'Hello' => 'Olá',
'Here you can download your personal data in a comma separated values format.' => 'Aqui pode descarregar os seus dados pessoais num ficheiro separado por virgulas.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Eu aceito o processamento dos meus dados pessoais e o uso de cookies para facilitar as operações neste site. Para mais informações leia a nossa {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Eu aceito o processamento dos meus dados pessoais e o uso de cookies para facilitar as operações neste site. Para mais informações leia a nossa {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Se já se registou, entre e associe esta conta nas definições',
'If you cannot click the link, please try pasting the text into your browser' => 'Se não conseguir abrir o link, por favor tente colá-lo no seu browser',
'If you did not make this request you can ignore this email' => 'Se não fez este pedido pode ignorar este email',
@ -254,54 +254,42 @@ return [
'Your password has expired, you must change it now' => 'A sua password expirou, deve alterá-la agora',
'Your personal information has been removed' => 'Os seus dados pessoais foram removidos',
'Your profile has been updated' => 'O seu perfil foi atualziado',
'privacy policy' => '@@politica de privacidade@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'privacy policy' => 'politica de privacidade',
'{0} cannot be blank.' => '{0} não pode ficar vazio.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => '',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => '',
'Children' => '',
'Class' => '',
'Current' => '',
'Data privacy' => '',
'Email' => '',
'Gravatar email' => '',
'IP' => '',
'Inactive' => '',
'Items' => '',
'Last activity' => '',
'Password' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'VKontakte' => '',
'Website' => '',
'Yandex' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@Foi enviado um email com as instruções para restaurar a sua password@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@Autenticação de dois passos protege-o do roubo de credenciais de acesso@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -109,7 +109,7 @@ return [
'Gravatar email' => 'Gravatar email',
'Hello' => 'buna',
'Here you can download your personal data in a comma separated values format.' => 'Aici puteți descărca datele personale într-un format de valori separate prin virgulă.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Sunt de acord cu prelucrarea datelor mele personale și utilizarea cookie-urilor pentru a facilita funcționarea acestui site. Pentru mai multe informații, citiți {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Sunt de acord cu prelucrarea datelor mele personale și utilizarea cookie-urilor pentru a facilita funcționarea acestui site. Pentru mai multe informații, citiți {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Dacă v-ați înregistrat deja, conectați-vă și conectați-l pe pagina de setări',
'If you cannot click the link, please try pasting the text into your browser' => 'Dacă nu puteți da clic pe link, încercați să inserați textul în browser',
'If you did not make this request you can ignore this email' => 'Dacă nu ați făcut această solicitare, puteți ignora acest e-mail',
@ -265,29 +265,43 @@ return [
'Your password has expired, you must change it now' => 'Parola dvs. a expirat, trebuie să o modificați acum',
'Your personal information has been removed' => 'Informațiile dvs. personale au fost eliminate',
'Your profile has been updated' => 'Profilul dvs. a fost actualizat',
'privacy policy' => '@@politica de confidentialitate@@',
'privacy policy' => 'politica de confidentialitate',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, data, MMM dd, AAAA HH: mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, data, MMMM dd, AAAA HH: mm}',
'{0} cannot be blank.' => '{0} nu poate fi gol.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Rule class name' => '',
'Select rule...' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Two factor authentication protects you in case of stolen credentials' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@A fost trimis un mesaj la adresa dvs. de e-mail.@@',
'An email has been sent with instructions for resetting your password' => '@@A fost trimis un e-mail cu instrucțiuni pentru resetarea parolei@@',
'Awesome, almost there. ' => '@@Minunat, aproape gata.@@',
'Disable Two-Factor Auth' => '@@Dezactivați autentificarea cu două factori@@',
'Enable Two-factor auth' => '@@Activați Auth@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Am agregat prelucrarea datelor mele personale și utilizarea cookie-urilor pentru a facilita funcționarea acestui site. Pentru mai multe informații, citiți {privacyPolicy}@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Am agregat prelucrarea datelor mele personale și utilizarea cookie-urilor pentru a facilita funcționarea acestui site. Pentru mai multe informații, citiți {privacyPolicy}@@',
'Invalid two-factor code' => '@@Cod de două factori nevalid@@',
'Last login' => '@@Ultima logare@@',
'Now you can resume the login process' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@Aceasta va dezactiva auth-ul cu două factori. Esti sigur?@@',
'Two Factor Authentication' => '@@Două autentificare cu factori@@',
'Two factor authentication protects you against stolen credentials' => '@@Autentificarea cu două factori vă protejează împotriva acreditărilor furate@@',

21
src/User/resources/i18n/ru/usuario.php Normal file → Executable file
View File

@ -27,6 +27,7 @@ return [
'Account details' => 'Детали аккаунта',
'Account details have been updated' => 'Аккаунт был обновлен',
'Account settings' => 'Настройки аккаунта',
'Active' => 'Активно',
'Already registered? Sign in!' => 'Уже зарегистрированы? Войдите!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => 'Письмо с инструкциями по созданию нового пароля было выслано на {email}, в случае если данный адрес связан с {appName} аккаунтом',
'An error occurred processing your request' => 'Во время выполнения запроса произошла ошибка',
@ -80,6 +81,7 @@ return [
'Create new rule' => 'Создать правило',
'Created at' => 'Дата создания',
'Credentials will be sent to the user by email' => 'Данные для входа будут отправлены пользователю на почту',
'Current' => 'Текущий',
'Current password' => 'Текущий пароль',
'Current password is not valid' => 'Текущий пароль введён неправильно',
'Data processing consent' => 'Cогласие на обработку данных',
@ -110,7 +112,8 @@ return [
'Gravatar email' => 'Email для Gravatar',
'Hello' => 'Здравствуйте',
'Here you can download your personal data in a comma separated values format.' => 'Здесь вы можете загрузить свои персональные данные в формате значений, разделенных запятыми.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Я соглашаюсь на обработку моих персональных данных и использование файлов cookie для облегчения работы этого сайта. Для получения дополнительной информации ознакомьтесь с нашей {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Я соглашаюсь на обработку моих персональных данных и использование файлов cookie для облегчения работы этого сайта. Для получения дополнительной информации ознакомьтесь с нашей {privacyPolicy}',
'IP' => 'IP',
'If you already registered, sign in and connect this account on settings page' => 'Если вы уже зарегистрированы, войдите и подключите аккаунт в настройках',
'If you cannot click the link, please try pasting the text into your browser' => 'Если вы не можете нажать на ссылку, скопируйте её и вставьте в адресную строку вашего браузера',
'If you did not make this request you can ignore this email' => 'Если вы получили это сообщение по ошибке, просто проигнорируйте или удалите его',
@ -118,6 +121,7 @@ return [
'In order to complete your registration, please click the link below' => 'Чтобы активировать свой аккаунт, пожалуйста, нажмите на ссылку ниже',
'In order to complete your request, please click the link below' => 'Чтобы завершить запрос, нажмите на ссылку ниже',
'In order to finish your registration, we need you to enter following fields' => 'Чтобы закончить регистрацию, заполните следующие поля',
'Inactive' => 'Не активно',
'Information' => 'Информация',
'Invalid login or password' => 'Неправильный логин или пароль',
'Invalid or expired link' => 'Ссылка неправильна или устарела',
@ -127,6 +131,7 @@ return [
'It will be deleted forever' => 'Он будет удалён навсегда',
'Items' => 'Элементы',
'Joined on {0, date}' => 'Зарегистрирован {0, date}',
'Last activity' => 'Последняя активность',
'Last login IP' => 'IP последнего входа',
'Last login time' => 'Время последнего входа',
'Last password change' => 'Последняя смена пароля',
@ -185,10 +190,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Просканируйте QR-код приложением Google Authenticator App, затем вставьте временный код в поле и отправьте.',
'Select rule...' => 'Выберите правило...',
'Send password recovery email' => 'Отправить письмо с восстановлением пароля',
'Session ID' => 'ID сесии',
'Session history' => 'История сессий',
'Sign in' => 'Войти',
'Sign up' => 'Зарегистрироваться',
'Something went wrong' => 'Что-то пошло не так',
'Status' => 'Статус',
'Submit' => 'Подтвердить',
'Switch identities is disabled.' => 'Переключение на другой аккаунт отключено.',
'Terminate all sessions' => 'Прекратить другие сеансы',
'Thank you for signing up on {0}' => 'Спасибо за регистрацию на сайте {0}',
'Thank you, registration is now complete.' => 'Поздравляем, регистрация успешно завершена!',
'The "recaptcha" component must be configured.' => 'Необходимо настроить компонент "recaptcha"',
@ -229,7 +239,9 @@ return [
'Update rule' => 'Изменить правило',
'Update user account' => 'Обновить аккаунт пользователя',
'Updated at' => 'Дата редактирования',
'User ID' => 'ID пользователя',
'User account could not be created.' => 'Не удалось создать аккаунт для пользователя.',
'User agent' => 'User agent',
'User block status has been updated.' => 'Статус блокировки пользователя обновлён.',
'User could not be registered.' => 'Не удалось зарегистрировать пользователя.',
'User has been confirmed' => 'Пользователь был активирован',
@ -265,11 +277,12 @@ return [
'Your account on {0} has been created' => 'Ваш аккаунт на сайте "{0}" был успешно создан',
'Your confirmation token is invalid or expired' => 'Ваша ссылка устарела или является ошибочной',
'Your consent is required to register' => 'Ваше согласие требуется для регистрации',
'Your consent is required to work with this site' => 'Ваше согласие требуется для работы с этим сайтом',
'Your email address has been changed' => 'Ваш email был успешно изменён',
'Your password has expired, you must change it now' => 'Срок действия вашего пароля истек, сейчас вы должны изменить его',
'Your personal information has been removed' => 'Ваша персональная информация удалена',
'Your profile has been updated' => 'Настройки профиля были успешно сохранены',
'privacy policy' => '@@политикой конфиденциальности@@',
'privacy policy' => 'политикой конфиденциальности',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, d MMM YYYY в HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, d MMMM YYYY в HH:mm}',
'{0} cannot be blank.' => '{0} не может быть пустым.',
@ -278,15 +291,17 @@ return [
'Submit' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@Сообщение было отправлено на вашу электронную почту@@',
'An email has been sent with instructions for resetting your password' => '@@Вам отправлено письмо с инструкциями по смене пароля@@',
'Awesome, almost there. ' => '@@Замечательно, почти готово!@@',
'Class "{0}" does not exist' => '@@Класс "{0}" не найден@@',
'Disable Two-Factor Auth' => '@@Отключить двухфакторную авторизацию@@',
'Enable Two-factor auth' => '@@Включить двухфакторную авторизацию@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Invalid two-factor code' => '@@Неверный код двухфакторной авторизации@@',
'Last login' => '@@Последний вход@@',
'Now you can resume the login process' => '@@@@',
'Registration ip' => '@@IP при регистрации@@',
'Rule class can not be instantiated' => '@@Класс правила не может быть создан@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@Класс правила должен наследоваться от "yii\\rbac\\Rule"@@',

View File

@ -0,0 +1,282 @@
<?php
/**
* Message translations.
*
* This file is automatically generated by 'yii message/extract' command.
* It contains the localizable messages extracted from source code.
* You may modify this file by translating the extracted messages.
*
* Each array element represents the translation (value) of a message (key).
* If the value is empty, the message is considered as not translated.
* Messages that no longer need translation will have their translations
* enclosed between a pair of '@@' marks.
*
* Message string can be used with plural forms format. Check i18n section
* of the guide for details.
*
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'(not set)' => '(prázdne)',
'A confirmation message has been sent to your new email address'
=> 'Na Vašu novú e-mailovú adresu bola odoslaná potvrdzujúca správa',
'A message has been sent to your email address. It contains a confirmation link that you must '.
'click to complete registration.'
=> 'Na Vašu e-mailovú adresu bola odoslaná správa. '.
'Obsahuje potvrdzovací odkaz, na ktorý musíte kliknúť, aby ste dokončili registráciu.',
'A new confirmation link has been sent' => 'Bol odoslaný nový potvrdzovací odkaz',
'A password will be generated automatically if not provided' => 'Ak chcete automaticky generovať heslo, nechajte pole prázdne',
'Account' => 'Účet',
'Account confirmation' => 'Potvrdenie účtu',
'Account details' => 'Detail účtu',
'Account details have been updated' => 'Nastavenia účtu boli aktualizované',
'Account settings' => 'Nastavenia účtu',
'Already registered? Sign in!' => 'Už ste registrovaný? Prihláste sa!',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' =>
'E-mail s pokynmi na vytvorenie hesla bol odoslaný na adresu {email},'.
'za predpokladu, že je prepojený s účtom {appName}. Aktuálne heslo sa nezmenilo.',
'An error occurred processing your request' => 'Pri spracovaní Vašej žiadosti sa vyskytla chyba',
'Are you sure you want to block this user?' => 'Naozaj chcete zablokovať tohto používateľa?',
'Are you sure you want to confirm this user?' => 'Naozaj chcete potvrdiť tohto používateľa?',
'Are you sure you want to delete this user?' => 'Naozaj chcete tohto používateľa odstrániť?',
'Are you sure you want to switch to this user for the rest of this Session?' => 'Naozaj chcete na tohto používateľa prepnúť na zvyšok tejto relácie?',
'Are you sure you want to unblock this user?' => 'Naozaj chcete tohto používateľa znova aktivovať?',
'Are you sure you wish the user to change their password at next login?' => 'Naozaj chcete, aby používateľ zmenil svoje heslo pri ďalšom prihlásení?',
'Are you sure you wish to send a password recovery email to this user?' => 'Naozaj chcete tomuto používateľovi poslať e-mail na obnovenie hesla?',
'Are you sure? Deleted user can not be restored' => 'Si si istý? Odstránených používateľov nie je možné obnoviť',
'Are you sure? There is no going back' => 'Si si istý? Už niet cesty späť',
'Assignments' => 'Priradenia',
'Assignments have been updated' => 'Priradenia boli aktualizované',
'Auth item with such name already exists' => 'Autorizácia s týmto menom už existuje',
'Authentication rule class {0} can not be instantiated' => 'Nie je možné vytvoriť inštanciu pravidla overovania triedy {0}',
'Authorization item successfully created.' => 'Autorizácia bola úspešne vytvorená',
'Authorization item successfully removed.' => 'Autorizácia bola úspešne odstránená',
'Authorization item successfully updated.' => 'Autorizácia bola úspešne uložená',
'Authorization rule has been added.' => 'Bolo pridané autorizačné pravidlo.',
'Authorization rule has been removed.' => 'Pravidlo autorizácie bolo odstránené.',
'Authorization rule has been updated.' => 'Pravidlo autorizácie bolo uložené.',
'Awesome, almost there. Now you need to click the confirmation link sent to your new email address.' => 'Takmer to máte. Teraz stačí navštíviť aktivačný odkaz, ktorý bol odoslaný na Vašu novú e-mailovú adresu.',
'Awesome, almost there. Now you need to click the confirmation link sent to your old email address.' => 'Takmer to máte. Všetko, čo musíte urobiť, je navštíviť aktivačný odkaz, ktorý bol odoslaný na Vašu starú e-mailovú adresu.',
'Back to privacy settings' => 'Späť na nastavenia ochrany osobných údajov',
'Bio' => 'Bio',
'Block' => 'Zablokovať',
'Block status' => 'Stav blokácie',
'Blocked at {0, date, MMMM dd, YYYY HH:mm}' => 'Zablokovaný {0, date, dd. MMMM YYYY, HH:mm}',
'Cancel' => 'Zrušiť',
'Cannot assign role "{0}" as the AuthManager is not configured on your console application.' => 'Nemôžeme priradiť rolu "{0}", pretože AuthManager nie je nakonfigurovaný v konzolovej aplikácii.',
'Change your avatar at Gravatar.com' => 'Zmeniť Váš Avatar cez Gravatar.com',
'Children' => 'Dieťa',
'Class' => 'Trieda',
'Close' => 'Zavrieť',
'Complete password reset on {0}' => 'Dokončenie obnovenia hesla dňa {0}',
'Confirm' => 'Potvrdiť',
'Confirm account on {0}' => 'Účet potvrdený {0}',
'Confirm email change on {0}' => 'Potvrdiť zmenu e-mailu na {0}',
'Confirmation' => 'Potvrdenie',
'Confirmation status' => 'Stav potvrdenia',
'Confirmation time' => 'Čas potvrdenia',
'Confirmed' => 'Potvrdené',
'Confirmed at {0, date, MMMM dd, YYYY HH:mm}' => 'Potvrdené o{0, date, dd. MMMM YYYY, HH::mm}',
'Connect' => 'Pripojiť',
'Continue' => 'Pokračovať',
'Create' => 'Vytvoriť',
'Create a user account' => 'Vytvoriť nové honto',
'Create new permission' => 'Vytvoriť nové povolenie',
'Create new role' => 'Vytvoriť novú rolu',
'Create new rule' => 'Vytvoriť nové pravidlo',
'Created at' => 'Vytvorené',
'Credentials will be sent to the user by email' => 'Prístupové údaje sa používateľovi zasielajú e-mailom',
'Current password' => 'Aktuálne heslo',
'Current password is not valid' => 'Aktuálne heslo nie je správne',
'Data processing consent' => 'Súhlas so spracovaním údajov',
'Delete' => 'Vymazať',
'Delete account' => 'Vymazať účet',
'Delete my account' => 'Odstrániť môj používateľský účet',
'Delete personal data' => 'Vymazať osobné údaje',
'Deleted by GDPR request' => 'Vymazané podľa požiadaviek GDPR',
'Description' => 'Popis',
'Didn\'t receive confirmation message?' => 'Potvrdzovací e-mail nebol prijatý?',
'Disable two factor authentication' => 'Deaktivujte dvojfaktorovú autentifikáciu',
'Disconnect' => 'Odpojiť',
'Don\'t have an account? Sign up!' => 'Ešte nemáte účet? Zaregistrovať sa!',
'Download my data' => 'Stiahnite si svoje vlastné údaje',
'Email' => 'E-Mail',
'Email (public)' => 'E-Mail (verejný)',
'Enable' => 'aktivovať',
'Enable two factor authentication' => 'Povoliť dvojfaktorové overenie',
'Error occurred while changing password' => 'Chyba pri zmene hesla',
'Error occurred while confirming user' => 'Nepodarilo sa potvrdiť používateľa',
'Error occurred while deleting user' => 'Chyba pri mazaní používateľa',
'Error sending registration message to "{email}". Please try again later.' => 'Nepodarilo sa odoslať registračnú správu na "{email}". Skúste neskôr prosím.',
'Error sending welcome message to "{email}". Please try again later.' => 'Chyba pri odosielaní uvítacej správy na „{email}“. Skúste neskôr prosím.',
'Export my data' => 'Exportujte svoje vlastné údaje',
'Finish' => 'Hotovo',
'Force password change at next login' => 'Vynútiť zmenu hesla pri ďalšom prihlásení',
'Forgot password?' => 'Zabudli ste heslo?',
'Gravatar email' => 'Gravatarový e-mail',
'Hello' => 'Dobrý deň',
'Here you can download your personal data in a comma separated values format.' => 'Tu si môžete stiahnuť svoje osobné údaje vo formáte oddelenom čiarkami',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Súhlasím so spracovaním mojich osobných údajov a používaním súborov cookie s cieľom zjednodušiť užívateľa tejto služby. Ďalšie informácie sú k dispozícii na našej {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Ak ste sa už zaregistrovali, prihláste sa a pripojte daný účet na stránke nastavení',
'If you cannot click the link, please try pasting the text into your browser' => 'Ak na odkaz nemôžete kliknúť, skúste ho pridať na panel prehľadávača',
'If you did not make this request you can ignore this email' => 'Ak ste túto žiadosť nepodali, môžete tento e-mail ignorovať',
'Impersonate this user' => 'Prepnúť na tohto používateľa',
'In order to complete your registration, please click the link below' => 'Pre dokončenie registrácie kliknite na odkaz dole',
'In order to complete your request, please click the link below' => 'Ak chcete dokončiť svoju požiadavku, kliknite na odkaz nižšie',
'In order to finish your registration, we need you to enter following fields' => 'Aby ste mohli dokončiť svoju registráciu, musíte vyplniť nasledujúce polia',
'Information' => 'Informácia',
'Invalid login or password' => 'Nesprávne prihlasovacie meno alebo heslo',
'Invalid or expired link' => 'Nesprávne alebo už expirovaný odkaz',
'Invalid password' => 'Nesprávne heslo',
'Invalid two factor authentication code' => 'Nesprávny kód dvoj-faktorového prihlásenia',
'Invalid value' => 'Nesprávna hodnota',
'It will be deleted forever' => 'Vymazanie je nenávratné',
'Items' => 'Položky',
'Joined on {0, date}' => 'Pripojené {0, date}',
'Last login IP' => 'Posledné IP prihlásenia',
'Last login time' => 'Posledné prihlásenie',
'Last password change' => 'Posledná zmena hesla',
'Location' => 'Umiestnenie',
'Login' => 'Prihlasovacie meno',
'Logout' => 'Odhlásenie',
'Manage users' => 'Správa užívateľov',
'Name' => 'Meno',
'Networks' => 'Siete',
'Never' => 'Nikdy',
'New email' => 'Nový E-Mail',
'New password' => 'Nové heslo',
'New permission' => 'Nové povolenie',
'New role' => 'Nová rola',
'New rule' => 'Nové pravidlo',
'New user' => 'Nový užívateľ',
'Not blocked' => 'Odblokovaný',
'Not found' => 'Nenájdené',
'Once you delete your account, there is no going back' => 'Po odstránení účtu už niet cesty späť',
'Once you have deleted your data, you will not longer be able to sign in with this account.' => 'Ak ste odstránili svoje vlastné údaje, pomocou tohto používateľského mena sa už nemôžete prihlásiť.',
'Password' => 'Heslo',
'Password age' => 'Platnosť hesla',
'Password has been changed' => 'Heslo bolo zmenene',
'Permissions' => 'Povolenia',
'Please be certain' => 'Si si naozaj istý?',
'Please click the link below to complete your password reset' => 'Obnovu hesla dokončíte kliknutím na nasledujúci odkaz',
'Please fix following errors:' => 'Opravte nasledujúce chyby:',
'Privacy' => 'Súkromie',
'Privacy settings' => 'Nastavenia ochrany osobných údajov',
'Profile' => 'Profil',
'Profile details' => 'Detail profilu',
'Profile details have been updated' => 'Detail profilu bol aktualizovaný',
'Profile settings' => 'Nastavenie profilu',
'Recover your password' => 'Obnovoť Vaše heslo',
'Recovery link is invalid or expired. Please try requesting a new one.' => 'Odkaz na obnovenie je nesprávny alebo jeho platnosť uplynula. Vyžiadajte si nový',
'Recovery message sent' => 'Správa o obnovení bola odoslaná',
'Registration IP' => 'Registračná IP',
'Registration on this website is disabled' => 'Registrácia na tomto webe je deaktivovaná',
'Registration time' => 'Čas registrácie',
'Remember me next time' => 'Zapamätať si prihlásenie',
'Request new confirmation message' => 'Vyžiadajte si nový odkaz na obnovenie',
'Required "key" cannot be empty.' => 'Požadovaný "kľúč" nemôže byť prázdny.',
'Required "secret" cannot be empty.' => 'Povinné "tajomstvo" nemôže byť prázdne.',
'Reset your password' => 'Obnoviť heslo',
'Role "{0}" not found. Creating it.' => 'Rola "{0}" sa nenašla. Vytvorte ju.',
'Roles' => 'Role',
'Rule' => 'Pravidlo',
'Rule class must extend "yii\\rbac\\Rule".' => 'Trieda pravidla musí obsahovať výraz "yii\\rbac \\Rule".',
'Rule class name' => 'Názov triedy pravidla',
'Rule name' => 'Názov pravidla',
'Rule name {0} is already in use' => 'Názov pravidla {0} sa už používa',
'Rule {0} does not exists' => 'Pravidlo {0} neexistuje',
'Rule {0} not found.' => 'Pravidlo {0} sa nenašlo.',
'Rules' => 'Pravidlá',
'Save' => 'Uložiť',
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => 'Naskenujte Qr kód pomocou aplikácie Google Authenticator, potom vložte dočasný kľúč do poľa a odošlite ho.',
'Select rule...' => 'Vyberte pravidlo ...',
'Send password recovery email' => 'Pošlite e-mail na obnovenie hesla',
'Sign in' => 'Prihlásenie',
'Sign up' => 'Registrácia',
'Something went wrong' => 'Niečo sa pokazilo',
'Switch identities is disabled.' => 'Prepínanie identít je deaktivované.',
'Thank you for signing up on {0}' => 'Ďakujeme za registráciu dňa {0}',
'Thank you, registration is now complete.' => 'Ďakujeme, Vaša registrácia je teraz dokončená.',
'The "recaptcha" component must be configured.' => 'Musí byť nakonfigurovaný komponent „recaptcha“',
'The confirmation link is invalid or expired. Please try requesting a new one.' => 'Váš aktivačný odkaz je nesprávny alebo jeho platnosť uplynula. Vyžiadajte si nový.',
'The verification code is incorrect.' => 'Overovací kľúč je neplatný',
'There is neither role nor permission with name "{0}"' => 'S menom "{0}" neexistuje ani rola, ani autorizácia.',
'There was an error in saving user' => 'Chyba pri ukladaní používateľa',
'This account has already been connected to another user' => 'Tento účet už bol pripojený iným používateľom',
'This email address has already been taken' => 'Emailová adresa je už použitá',
'This username has already been taken' => 'Toto uživateľské meno je už obsadené',
'This will disable two factor authentication. Are you sure?' => 'Týmto sa deaktivuje dvojfaktorová autentifikácia. Si si istý?',
'This will remove your personal data from this site. You will no longer be able to sign in.' => 'Týmto vymažete svoje osobné údaje z tejto služby. Už sa nebudete môcť prihlásiť.',
'Time zone' => 'Časové pásmo',
'Time zone is not valid' => 'Časové pásmo je nesprávne',
'Two Factor Authentication (2FA)' => 'Dvoj-faktorové prihlásenie (2FA)',
'Two factor authentication code' => 'Kód dvoj-faktorového prihlásenia',
'Two factor authentication has been disabled.' => 'Dvoj-faktorové prihlásenie bolo deaktivované',
'Two factor authentication protects you in case of stolen credentials' => 'Dvoj-faktorové prihlásenie Vás chráni pred únikom prihlasovacích údajov',
'Two factor authentication successfully enabled.' => 'Dvoj-faktorové prihlásenie bolo úspešne aktivované',
'Unable to confirm user. Please, try again.' => 'Používateľa nebolo možné potvrdiť. Prosím skúste znova.',
'Unable to create an account.' => 'Účet sa nepodarilo vytvoriť.',
'Unable to create authorization item.' => 'Položku autorizácie sa nepodarilo vytvoriť',
'Unable to create new authorization rule.' => 'Nie je možné vytvoriť nové pravidlo overovania.',
'Unable to delete user. Please, try again later.' => 'Používateľa sa nepodarilo odstrániť.',
'Unable to disable Two factor authentication.' => 'Chyba pri deaktivácii dvoj-faktorovej autentifikácie',
'Unable to remove authorization item.' => 'Položku autorizácie sa nepodarilo vymazať.',
'Unable to send confirmation link' => 'Nepodarilo sa odoslať odkaz na potvrdenie',
'Unable to send recovery message to the user' => 'Používateľovi sa nepodarilo odoslať správu na obnovenie.',
'Unable to update authorization item.' => 'Nepodarilo sa aktualizovať položku autorizácie.',
'Unable to update authorization rule.' => 'Pravidlo autorizácie sa nepodarilo uložiť.',
'Unable to update block status.' => 'Stav blokovania sa nepodarilo zmeniť',
'Unblock' => 'Odblokovať',
'Unconfirmed' => 'Nepotvrdený',
'Update' => 'Aktualizovať',
'Update assignments' => 'Aktualizovať priradenie',
'Update permission' => 'Aktualizovať povolenie',
'Update role' => 'Aktualizovať rolu',
'Update rule' => 'Aktualizovať pravidlo',
'Update user account' => 'Aktualizovať účet',
'Updated at' => 'Aktualizované',
'User account could not be created.' => 'Používateľský účet sa nepodarilo vytvoriť.',
'User block status has been updated.' => 'Stav používateľa bol uložený',
'User could not be registered.' => 'Používateľa sa nepodarilo zaregistrovať.',
'User has been confirmed' => 'Užívateľ bol potvrdený',
'User has been created' => 'Používateľ bol vytvorený',
'User has been deleted' => 'Používateľ bol odstránený',
'User is not found' => 'Používateľ sa nenašiel',
'User not found.' => 'Užívateľ Nenájdený.',
'User will be required to change password at next login' => 'Používateľ bude nútený zmeniť svoje heslo pri ďalšom prihlásení',
'Username' => 'Prihlasovacie meno',
'Users' => 'Užívatelia',
'VKontakte' => 'VKontakte',
'Verification failed. Please, enter new code.' => 'Overenie zlyhalo. Zadajte nový kľúč.',
'We couldn\'t re-send the mail to confirm your address. Please, verify is the correct email or if it has been confirmed already.' => 'E-mail sa nám nepodarilo znova odoslať, aby sme potvrdili Vašu adresu. Skontrolujte, či je e-mailová adresa správna alebo či už bola potvrdená.',
'We have generated a password for you' => 'Bolo pre vás vygenerované heslo',
'We have received a request to change the email address for your account on {0}' => 'Dostali sme žiadosť o zmenu Vašej e-mailovej adresy na {0}',
'We have received a request to reset the password for your account on {0}' => 'Dňa {0} sme dostali žiadosť o obnovenie hesla.',
'We have sent confirmation links to both old and new email addresses. You must click both links to complete your request.' => 'Poslali sme vám potvrdzovacie odkazy na starú a novú e-mailovú adresu. Na dokončenie žiadosti musíte kliknúť na oba odkazy.',
'Website' => 'Webstránka',
'Welcome to {0}' => 'Vitajte v {0}',
'Yandex' => 'Yandex',
'You are about to delete all your personal data from this site.' => 'Z tejto služby odstránite všetky osobné údaje',
'You can assign multiple roles or permissions to user by using the form below' => 'Užívateľovi môžete pomocou nasledujúceho formulára priradiť viacero rolí alebo povolení',
'You can connect multiple accounts to be able to log in using them' => 'Môžete prepojiť viac účtov a prihlásiť sa pomocou nich',
'You cannot remove your own account' => 'Nemôžete vymazať svoj vlastný účet',
'You need to confirm your email address' => 'Musíte potvrdiť svoju e-mailovú adresu',
'Your account details have been updated' => 'Vaše nastavenie účtu bolo aktualizované',
'Your account has been blocked' => 'Váš účet bol zablokovaný',
'Your account has been blocked.' => 'Váš účet bol zablokovaný.',
'Your account has been completely deleted' => 'Váš účet bol úplne odstránený',
'Your account has been connected' => 'Váš účet bol pripojený',
'Your account has been created' => 'Váš účet bol vytvorený',
'Your account has been created and a message with further instructions has been sent to your email' => 'Váš účet bol vytvorený a na váš e-mail bola odoslaná správa s ďalšími pokynmi',
'Your account on {0} has been created' => 'Váš účet dňa {0} bol vytvorený',
'Your confirmation token is invalid or expired' => 'Váš potvrdzovací token je neplatný alebo jeho platnosť vypršala',
'Your consent is required to register' => 'Na registráciu sa vyžaduje váš súhlas',
'Your email address has been changed' => 'Vaša emailová adresa bola zmenená',
'Your password has expired, you must change it now' => 'Vaše heslo vypršalo, musíte si ho teraz zmeniť',
'Your personal information has been removed' => 'Vaše osobné údaje boli odstránené',
'Your profile has been updated' => 'Váš profil bol aktualizovaný',
'privacy policy' => 'Zásady ochrany osobných údajov',
'{0, date, MMM dd, YYYY HH:mm}' => '{0, date, dd. MMM YYYY, HH:mm}',
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, dd. MMMM YYYY, HH:mm}',
'{0} cannot be blank.' => '{0} nesmie byť prázdne.',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'IP' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -110,7 +110,7 @@ return [
'Gravatar email' => 'Gravatar email',
'Hello' => 'Привіт',
'Here you can download your personal data in a comma separated values format.' => 'Тут Ви можете скачати Ваші персональні дані у форматі CSV.',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Я даю згоду на обробку моїх персональних даних та на використання cookie даним сайтом. Для більш детальної інформації ознайомтесь з {privacyPolicy}@@',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => 'Я даю згоду на обробку моїх персональних даних та на використання cookie даним сайтом. Для більш детальної інформації ознайомтесь з {privacyPolicy}',
'If you already registered, sign in and connect this account on settings page' => 'Якщо Ви вже зареєстровані - увійдіть та підключіть цей акаунт в налаштуваннях.',
'If you cannot click the link, please try pasting the text into your browser' => 'Якщо Ви не можете натиснути на посилання, спробуйте вставити його адресу у Ваш браузер.',
'If you did not make this request you can ignore this email' => 'Якщо Ви не робили запит - можете ігнорувати дане повідомлення.',
@ -273,20 +273,34 @@ return [
'{0, date, MMMM dd, YYYY HH:mm}' => '{0, date, MMMM dd, YYYY HH:mm}',
'{0} cannot be blank.' => '{0} не може бути порожнім.',
'According to the European General Data Protection Regulation (GDPR) we need your consent to work with your personal data.' => '',
'Active' => '',
'Current' => '',
'Data privacy' => '',
'IP' => '',
'Inactive' => '',
'Last activity' => '',
'Recovery message sent' => '',
'Session ID' => '',
'Session history' => '',
'Status' => '',
'Submit' => '',
'Terminate all sessions' => '',
'Unfortunately, you can not work with this site without giving us consent to process your data.' => '',
'User ID' => '',
'User agent' => '',
'Your consent is required to work with this site' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'A message has been sent to your email address. ' => '@@На вашу електронну адресу надіслано повідомлення@@',
'An email has been sent with instructions for resetting your password' => '@@Лист з інструкціями по зміні пароля надіслано на електронну адресу@@',
'Awesome, almost there. ' => '@@Чудово, майже все.@@',
'Class "{0}" does not exist' => '@@Клас "{0}" не існує@@',
'Disable Two-Factor Auth' => '@@Вимкнути двофакторну аутентифікацію@@',
'Enable Two-factor auth' => '@@Увімкнути двофакторну аутентифікацію@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@Я даю згоду на обробку моїх персональних даних та на використання cookie даним сайтом. Для більш детальної інформації ознайомтесь з {privacyPolicy}@@',
'Invalid two-factor code' => '@@Невірний код двофакторної авторизації@@',
'Last login' => '@@Останній вхід@@',
'Now you can resume the login process' => '@@@@',
'Registration ip' => '@@IP реєстрації@@',
'Rule class can not be instantiated' => '@@Клас Правила не може бути ініційований@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@Клас Правила має розширювати "yii\\rbac\\Rule"@@',

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -17,9 +17,6 @@
* NOTE: this file must be saved in UTF-8 encoding.
*/
return [
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'privacy policy' => '@@@@',
'{0, date, MMM dd, YYYY HH:mm}' => '@@@@',
'(not set)' => '',
'A confirmation message has been sent to your new email address' => '',
'A message has been sent to your email address. It contains a confirmation link that you must click to complete registration.' => '',
@ -31,6 +28,7 @@ return [
'Account details' => '',
'Account details have been updated' => '',
'Account settings' => '',
'Active' => '',
'Already registered? Sign in!' => '',
'An email with instructions to create a new password has been sent to {email} if it is associated with an {appName} account. Your existing password has not been changed.' => '',
'An error occurred processing your request' => '',
@ -84,6 +82,7 @@ return [
'Create new rule' => '',
'Created at' => '',
'Credentials will be sent to the user by email' => '',
'Current' => '',
'Current password' => '',
'Current password is not valid' => '',
'Data privacy' => '',
@ -115,6 +114,8 @@ return [
'Gravatar email' => '',
'Hello' => '',
'Here you can download your personal data in a comma separated values format.' => '',
'I agree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '',
'IP' => '',
'If you already registered, sign in and connect this account on settings page' => '',
'If you cannot click the link, please try pasting the text into your browser' => '',
'If you did not make this request you can ignore this email' => '',
@ -122,6 +123,7 @@ return [
'In order to complete your registration, please click the link below' => '',
'In order to complete your request, please click the link below' => '',
'In order to finish your registration, we need you to enter following fields' => '',
'Inactive' => '',
'Information' => '',
'Invalid login or password' => '',
'Invalid or expired link' => '',
@ -131,6 +133,7 @@ return [
'It will be deleted forever' => '',
'Items' => '',
'Joined on {0, date}' => '',
'Last activity' => '',
'Last login IP' => '',
'Last login time' => '',
'Last password change' => '',
@ -189,11 +192,15 @@ return [
'Scan the QrCode with Google Authenticator App, then insert its temporary code on the box and submit.' => '',
'Select rule...' => '',
'Send password recovery email' => '',
'Session ID' => '',
'Session history' => '',
'Sign in' => '',
'Sign up' => '',
'Something went wrong' => '',
'Status' => '',
'Submit' => '',
'Switch identities is disabled.' => '',
'Terminate all sessions' => '',
'Thank you for signing up on {0}' => '',
'Thank you, registration is now complete.' => '',
'The "recaptcha" component must be configured.' => '',
@ -235,7 +242,9 @@ return [
'Update rule' => '',
'Update user account' => '',
'Updated at' => '',
'User ID' => '',
'User account could not be created.' => '',
'User agent' => '',
'User block status has been updated.' => '',
'User could not be registered.' => '',
'User has been confirmed' => '',
@ -276,32 +285,11 @@ return [
'Your password has expired, you must change it now' => '',
'Your personal information has been removed' => '',
'Your profile has been updated' => '',
'Your role requires 2FA, you won\'t be able to use the application until you enable it' => '',
'privacy policy' => '',
'{0, date, MMM dd, YYYY HH:mm}' => '',
'{0, date, MMMM dd, YYYY HH:mm}' => '',
'{0} cannot be blank.' => '',
'A message has been sent to your email address. ' => '@@@@',
'An email has been sent with instructions for resetting your password' => '@@@@',
'Awesome, almost there. ' => '@@@@',
'Class "{0}" does not exist' => '@@@@',
'Disable Two-Factor Auth' => '@@@@',
'Enable Two-factor auth' => '@@@@',
'I aggree processing of my personal data and the use of cookies
to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'I aggree processing of my personal data and the use of cookies to facilitate the operation of this site. For more information read our {privacyPolicy}' => '@@@@',
'Invalid two-factor code' => '@@@@',
'Last login' => '@@@@',
'Registration ip' => '@@@@',
'Rule class can not be instantiated' => '@@@@',
'Rule class must extend "yii\\rbac\\Rule"' => '@@@@',
'This will disable two-factor auth. Are you sure?' => '@@@@',
'Two Factor Authentication' => '@@@@',
'Two factor authentication protects you against stolen credentials' => '@@@@',
'Two factor successfully enabled.' => '@@@@',
'Two-Factor Authentication' => '@@@@',
'Two-factor auth protects you against stolen credentials' => '@@@@',
'Two-factor authentication code' => '@@@@',
'Two-factor authorization has been disabled.' => '@@@@',
'Two-factor code' => '@@@@',
'Unable to disable two-factor authorization.' => '@@@@',
'We couldn\'t re-send the mail to confirm your address. ' => '@@@@',
'We have sent confirmation links to both old and new email addresses. ' => '@@@@',
'Every user having your role has two factor authentication mandatory, you must enable it' => '@@@@',
'Now you can resume the login process' => '@@@@',
];

View File

@ -0,0 +1,68 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
use Da\User\Widget\SessionStatusWidget;
use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\Pjax;
use Da\User\Model\SessionHistory;
use Da\User\Search\SessionHistorySearch;
use yii\web\View;
use yii\data\ActiveDataProvider;
/**
* @var $this View
* @var $searchModel SessionHistorySearch
* @var $dataProvider ActiveDataProvider
*/
?>
<?php $this->beginContent('@Da/User/resources/views/admin/update.php', ['user' => $user]) ?>
<div class="row">
<div class="col-xs-12">
<?= Html::a(
Yii::t('usuario', 'Terminate all sessions'),
['/user/admin/terminate-sessions', 'id' => $user->id],
[
'class' => 'btn btn-danger btn-xs pull-right',
'data-method' => 'post'
]
) ?>
</div>
</div>
<hr>
<?php Pjax::begin(); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
'user_agent',
'ip',
[
'contentOptions' => [
'class' => 'text-nowrap',
],
'label' => Yii::t('usuario', 'Status'),
'value' => function (SessionHistory $model) {
return SessionStatusWidget::widget(['model' => $model]);
},
],
[
'attribute' => 'updated_at',
'format' => 'datetime'
],
],
]); ?>
<?php Pjax::end(); ?>
<?php $this->endContent() ?>

10
src/User/resources/views/admin/update.php Normal file → Executable file
View File

@ -13,6 +13,7 @@ use Da\User\Model\User;
use yii\bootstrap\Nav;
use yii\helpers\Html;
use yii\web\View;
use Da\User\Module as UserModule;
/**
* @var View $this
@ -24,12 +25,14 @@ $this->title = Yii::t('usuario', 'Update user account');
$this->params['breadcrumbs'][] = ['label' => Yii::t('usuario', 'Users'), 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
/** @var UserModule $module */
$module = Yii::$app->getModule('user');
?>
<div class="clearfix"></div>
<?= $this->render(
'/shared/_alert',
[
'module' => Yii::$app->getModule('user'),
'module' => $module,
]
) ?>
@ -67,6 +70,11 @@ $this->params['breadcrumbs'][] = $this->title;
'label' => Yii::t('usuario', 'Assignments'),
'url' => ['/user/admin/assignments', 'id' => $user->id],
],
[
'label' => Yii::t('usuario', 'Session history'),
'url' => ['/user/admin/session-history', 'id' => $user->id],
'visible' => $module->enableSessionHistory,
],
'<hr>',
[
'label' => Yii::t('usuario', 'Confirm'),

10
src/User/resources/views/settings/_menu.php Normal file → Executable file
View File

@ -11,9 +11,12 @@
use yii\helpers\Html;
use yii\widgets\Menu;
use Da\User\Module as UserModule;
use Da\User\Model\User;
/** @var \Da\User\Model\User $user */
/** @var User $user */
$user = Yii::$app->user->identity;
/** @var UserModule $module */
$module = Yii::$app->getModule('user');
$networksVisible = count(Yii::$app->authClientCollection->clients) > 0;
@ -41,6 +44,11 @@ $networksVisible = count(Yii::$app->authClientCollection->clients) > 0;
'items' => [
['label' => Yii::t('usuario', 'Profile'), 'url' => ['/user/settings/profile']],
['label' => Yii::t('usuario', 'Account'), 'url' => ['/user/settings/account']],
[
'label' => Yii::t('usuario', 'Session history'),
'url' => ['/user/settings/session-history'],
'visible' => $module->enableSessionHistory,
],
['label' => Yii::t('usuario', 'Privacy'),
'url' => ['/user/settings/privacy'],
'visible' => $module->enableGdprCompliance

View File

@ -0,0 +1,79 @@
<?php
/*
* This file is part of the 2amigos/yii2-usuario project.
*
* (c) 2amigOS! <http://2amigos.us/>
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
use yii\helpers\Html;
use yii\grid\GridView;
use yii\widgets\Pjax;
use Da\User\Model\SessionHistory;
use Da\User\Search\SessionHistorySearch;
use yii\web\View;
use yii\data\ActiveDataProvider;
use Da\User\Widget\SessionStatusWidget;
/**
* @var $this View
* @var $searchModel SessionHistorySearch
* @var $dataProvider ActiveDataProvider
*/
$this->title = Yii::t('usuario', 'Session history');
$this->params['breadcrumbs'][] = $this->title;
?>
<?= $this->render('/shared/_alert', ['module' => Yii::$app->getModule('user')]) ?>
<div class="row">
<div class="col-md-3">
<?= $this->render('/settings/_menu') ?>
</div>
<div class="col-md-9">
<div class="panel panel-default">
<div class="panel-heading">
<?= Html::encode($this->title) ?>
<?= Html::a(
Yii::t('usuario', 'Terminate all sessions'),
['/user/settings/terminate-sessions'],
[
'class' => 'btn btn-danger btn-xs pull-right',
'data-method' => 'post'
]
) ?>
</div>
<div class="panel-body">
<?php Pjax::begin(); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
'user_agent',
'ip',
[
'contentOptions' => [
'class' => 'text-nowrap',
],
'label' => Yii::t('usuario', 'Status'),
'value' => function (SessionHistory $model) {
return SessionStatusWidget::widget(['model' => $model]);
},
],
[
'attribute' => 'updated_at',
'format' => 'datetime'
],
],
]); ?>
<?php Pjax::end(); ?>
</div>
</div>
</div>
</div>

View File

@ -35,9 +35,9 @@ use yii\widgets\ActiveForm;
]
) ?>
<?= $form->field($model, 'login')->textInput(['placeholder' => 'Login']) ?>
<?= $form->field($model, 'login')->textInput(['placeholder' => Yii::t('usuario', 'Login')]) ?>
<?= $form->field($model, 'password')->passwordInput(['placeholder' => 'Password']) ?>
<?= $form->field($model, 'password')->passwordInput(['placeholder' => Yii::t('usuario', 'Password')]) ?>
<?= $form->field($model, 'rememberMe')->checkbox() ?>

View File

@ -2,9 +2,9 @@
$db = [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=yii2-usuario-test',
'dsn' => 'mysql:host=127.0.0.1;dbname=yii2-usuario-test',
'username' => 'root',
'password' => '',
'password' => 'password',
'charset' => 'utf8',
];

View File

@ -1,5 +1,7 @@
<?php
use Da\User\Filter\TwoFactorAuthenticationEnforceFilter;
return [
'id' => 'yii2-user-tests',
'basePath' => dirname(__DIR__),
@ -24,7 +26,11 @@ return [
],
'db' => require __DIR__ . '/db.php',
'mailer' => [
'useFileTransport' => true,
'messageClass' => \yii\symfonymailer\Message::class,
[
'class' => \yii\symfonymailer\Mailer::class,
],
'useFileTransport' => false
],
'urlManager' => [
'showScriptName' => true,
@ -47,4 +53,12 @@ return [
],
],
'params' => [],
'on beforeAction' => function() {
Yii::$app->controller->attachBehavior(
'enforceTwoFactorAuthentication',[
'class' => TwoFactorAuthenticationEnforceFilter::class,
'except' => ['login', 'logout','account','two-factor', 'two-factor-enable'],
]
);
},
];

View File

@ -0,0 +1,11 @@
<?php
namespace tests\_fixtures;
use yii\test\ActiveFixture;
class AssignmentFixture extends ActiveFixture
{
public $modelClass = 'Da\User\Model\Assignment';
public $tableName = 'auth_assignment';
}

View File

@ -0,0 +1,11 @@
<?php
namespace tests\_fixtures;
use yii\test\ActiveFixture;
class PermissionFixture extends ActiveFixture
{
public $modelClass = 'Da\User\Model\Permission';
public $tableName = 'auth_item';
}

View File

@ -0,0 +1,8 @@
<?php
return [
'auth_assignment' => [
'item_name' => 'admin',
'user_id' => '1',
],
];

View File

@ -0,0 +1,9 @@
<?php
return [
'auth_item' => [
'name' => 'admin',
'type' => 1,
'description' => 'test admin',
],
];

View File

@ -73,4 +73,17 @@ return [
'updated_at' => $time,
'confirmed_at' => $time,
],
'user_with_2fa_enabled' => [
'id' => 7,
'username' => 'user2fa',
'email' => 'user2faenabled@example.com',
'password_hash' => '$2y$13$qY.ImaYBppt66qez6B31QO92jc5DYVRzo5NxM1ivItkW74WsSG6Ui',
'auth_key' => '39HU0m5lpjWtqstFVGFjj6lFb7UZDeRq',
'auth_tf_key' => '',
'auth_tf_enabled' => true,
'created_at' => $time,
'updated_at' => $time,
'confirmed_at' => $time,
'gdpr_consent' => false,
],
];

View File

@ -97,12 +97,12 @@ class GdprCest
$I->amOnRoute('/user/registration/register');
$this->register($I, 'tester@example.com', 'tester', 'tester');
$I->see('Your account has been created and a message with further instructions has been sent to your email');
$user = $I->grabRecord(User::className(), ['email' => 'tester@example.com']);
$token = $I->grabRecord(Token::className(), ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRMATION]);
/** @var yii\swiftmailer\Message $message */
$user = $I->grabRecord(User::class, ['email' => 'tester@example.com']);
$token = $I->grabRecord(Token::class, ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRMATION]);
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->email, $message->getTo());
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString())));
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->toString())));
$I->assertFalse($user->isConfirmed);
}
@ -118,12 +118,12 @@ class GdprCest
$I->amOnRoute('/user/registration/register');
$this->register($I, 'tester@example.com', 'tester');
$I->see('Your account has been created');
$user = $I->grabRecord(User::className(), ['email' => 'tester@example.com']);
$user = $I->grabRecord(User::class, ['email' => 'tester@example.com']);
$I->assertEquals('tester', $user->username);
/** @var yii\swiftmailer\Message $message */
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->email, $message->getTo());
$I->assertStringContainsString('We have generated a password for you', utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString())));
$I->assertStringContainsString('We have generated a password for you', utf8_encode(quoted_printable_decode($message->toString())));
}

View File

@ -36,14 +36,14 @@ $I->fillField('#recoveryform-email', $user->email);
$I->click('Continue');
$I->see('An email with instructions to create a new password has been sent to ' . $user->email);
$user = $I->grabRecord(User::className(), ['email' => $user->email]);
$token = $I->grabRecord(Token::className(), ['user_id' => $user->id, 'type' => Token::TYPE_RECOVERY]);
/** @var yii\swiftmailer\Message $message */
$user = $I->grabRecord(User::class, ['email' => $user->email]);
$token = $I->grabRecord(Token::class, ['user_id' => $user->id, 'type' => Token::TYPE_RECOVERY]);
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->email, $message->getTo());
$I->assertStringContainsString(
Html::encode($token->getUrl()),
utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString()))
utf8_encode(quoted_printable_decode($message->toString()))
);
$I->amGoingTo('reset password with invalid token');

View File

@ -68,12 +68,12 @@ class RegistrationCest
$I->amOnRoute('/user/registration/register');
$this->register($I, 'tester@example.com', 'tester', 'tester');
$I->see('Your account has been created and a message with further instructions has been sent to your email');
$user = $I->grabRecord(User::className(), ['email' => 'tester@example.com']);
$token = $I->grabRecord(Token::className(), ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRMATION]);
/** @var yii\swiftmailer\Message $message */
$user = $I->grabRecord(User::class, ['email' => 'tester@example.com']);
$token = $I->grabRecord(Token::class, ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRMATION]);
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->email, $message->getTo());
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString())));
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->toString())));
$I->assertFalse($user->isConfirmed);
}
@ -91,10 +91,10 @@ class RegistrationCest
$I->see('Your account has been created');
$user = $I->grabRecord(User::className(), ['email' => 'tester@example.com']);
$I->assertEquals('tester', $user->username);
/** @var yii\swiftmailer\Message $message */
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->email, $message->getTo());
$I->assertStringContainsString('We have generated a password for you', utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString())));
$I->assertStringContainsString('We have generated a password for you', utf8_encode(quoted_printable_decode($message->toString())));
}
protected function register(FunctionalTester $I, $email, $username = null, $password = null) {

View File

@ -34,12 +34,12 @@ $I->click('Save');
$I->seeRecord(User::className(), ['email' => $user->email, 'unconfirmed_email' => 'new_user@example.com']);
$I->see('A confirmation message has been sent to your new email address');
$user = $I->grabRecord(User::className(), ['id' => $user->id]);
$token = $I->grabRecord(Token::className(), ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRM_NEW_EMAIL]);
/** @var yii\swiftmailer\Message $message */
$user = $I->grabRecord(User::class, ['id' => $user->id]);
$token = $I->grabRecord(Token::class, ['user_id' => $user->id, 'type' => Token::TYPE_CONFIRM_NEW_EMAIL]);
/** @var \yii\mail\MessageInterface $message */
$message = $I->grabLastSentEmail();
$I->assertArrayHasKey($user->unconfirmed_email, $message->getTo());
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->getSwiftMessage()->toString())));
$I->assertStringContainsString(Html::encode($token->getUrl()), utf8_encode(quoted_printable_decode($message->toString())));
Yii::$app->user->logout();
$I->amGoingTo('log in using new email address before clicking the confirmation link');

View File

@ -0,0 +1,55 @@
<?php
/**
* @var Codeception\Scenario
*/
use tests\_fixtures\UserFixture;
use tests\_fixtures\PermissionFixture;
use tests\_fixtures\AssignmentFixture;
use tests\_fixtures\ProfileFixture;
$I = new FunctionalTester($scenario);
$I->wantTo('ensure that two factor authentication check works');
$I->haveFixtures(['user' => UserFixture::className()]);
$I->haveFixtures(['permission' => PermissionFixture::className()]);
$I->haveFixtures(['assignment' => AssignmentFixture::className()]);
$I->amGoingTo('try to login with user having two factor authentication enabled');
Yii::$app->getModule('user')->enableTwoFactorAuthentication = true;
$I->amOnRoute('/user/security/login');
$user = $I->grabFixture('user', 'user_with_2fa_enabled');
$I->fillField('#loginform-login', $user->email);
$I->fillField('#loginform-password', 'qwerty');
$I->click('Sign in');
$I->expectTo('See form to insert two factor authentication code');
$I->see('Two factor authentication code');
$I->amGoingTo('try to login with user permission admin, having two factor authentication disabled');
Yii::$app->getModule('user')->enableTwoFactorAuthentication = true;
Yii::$app->getModule('user')->twoFactorAuthenticationForcedPermissions = ['admin'];
$I->haveFixtures(['user' => UserFixture::className(), 'profile' => ProfileFixture::className()]);
$I->amOnRoute('/user/security/login');
$user = $I->grabFixture('user', 'user');
$I->fillField('#loginform-login', $user->email);
$I->fillField('#loginform-password', 'qwerty');
$I->click('Sign in');
$I->expectTo('The user must be forced to enable two factor authentication');
$I->see('Your role requires 2FA, you won\'t be able to use the application until you enable it');
Yii::$app->user->logout();
$I->amGoingTo('try to login with correct credentials when two factor authentication is disabled on the module');
Yii::$app->getModule('user')->enableTwoFactorAuthentication = false;
$I->amOnRoute('/user/security/login');
$I->amGoingTo('try to login with correct credentials');
$user = $I->grabFixture('user', 'user');
$I->fillField('#loginform-login', $user->email);
$I->fillField('#loginform-password', 'qwerty');
$I->click('Sign in');
$I->dontSee('Login');
$I->see('Logout');

View File

@ -0,0 +1,160 @@
<?php
use Da\User\Helper\SecurityHelper;
use yii\base\Security;
/**
* Testing for the `SecurityHelper.generatePassword()` function.
* Note that this test considers these sets of characters:
* $sets = [
* 'lower' => 'abcdefghjkmnpqrstuvwxyz',
* 'upper' => 'ABCDEFGHJKMNPQRSTUVWXYZ',
* 'digit' => '123456789',
* 'special' => '!#$%&*+,-.:;<=>?@_~'
* ];
*/
class GeneratePasswordTest extends \Codeception\Test\Unit
{
const ITERATIONS = 10000;
// Test with minPasswordRequirements equal to null (get default value/parameter)
public function testNullParameter ()
{
$length = 8;
$minPasswordRequirements = null;
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A(?=(.*\d){1})(?=(?:[^a-z]*[a-z]){1})(?=(?:[^A-Z]*[A-Z]){1})[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{8,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
// Test with minPasswordRequirements equal to an empty array (= password without requirements)
public function testEmptyParameter ()
{
$length = 8;
$minPasswordRequirements = [];
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{8,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
// Test with many lowercase characters, one uppercase character, one digit and one special character
public function testManyLowercaseCharacter ()
{
// Function parameters
$length = 8;
$minPasswordRequirements = [
'min' => 10,
'special' => 1,
'digit' => 1,
'upper' => 1,
'lower' => 5
];
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A(?=(.*\d){1})(?=(?:[^a-z]*[a-z]){5})(?=(?:[^A-Z]*[A-Z]){1})(?=(?:[0-9a-zA-Z]*[!#$%&*+,-.:;<=>?@_~]){1})[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{10,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
// Test with many special characters, one uppercase character, one digit
public function testManySpecialCharacter ()
{
// Function parameters
$length = 10;
$minPasswordRequirements = [
'min' => 10,
'special' => 6,
'digit' => 1,
'upper' => 1,
];
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A(?=(.*\d){1})(?=(?:[^A-Z]*[A-Z]){1})(?=(?:[0-9a-zA-Z]*[!#$%&*+,-.:;<=>?@_~]){6})[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{10,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
// Test with a long password and no requirements
public function testLongPassword ()
{
// Function parameters
$length = 20;
$minPasswordRequirements = [];
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{20,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
// Test with random requirements
public function testRandomRequirements ()
{
// Function parameters
$length = 8;
$minPasswordRequirements = [
'min' => 10,
'special' => 4,
'digit' => 3,
'upper' => 2,
'lower' => 1
];
// Helper
$securityHelper = new SecurityHelper(new Security()); // Empty security (it does not matter)
// Check password correctness
$ok = true;
for ($i = 0; $i < self::ITERATIONS; $i++) {
$password = $securityHelper->generatePassword($length, $minPasswordRequirements);
$result = preg_match('/\A(?=(.*\d){3})(?=(?:[^a-z]*[a-z]){1})(?=(?:[^A-Z]*[A-Z]){2})(?=(?:[0-9a-zA-Z]*[!#$%&*+,-.:;<=>?@_~]){4})[0-9a-zA-Z!#$%&*+,-.:;<=>?@_~]{10,}\z/', $password);
if ($result === 0) {
$ok = false;
break;
}
}
$this->assertTrue($ok);
}
}