Skip to content

Commit

Permalink
Remove the label placeholder
Browse files Browse the repository at this point in the history
  • Loading branch information
dood- committed Jan 8, 2024
1 parent 1e73321 commit a952cad
Show file tree
Hide file tree
Showing 79 changed files with 449 additions and 574 deletions.
2 changes: 1 addition & 1 deletion docs/guide/en/configuring-rules-via-php-attributes.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ final class User

> **Note:** [readonly properties] are supported only starting from PHP 8.1.
Error messages may include a `{label}` placeholder that is replaced with the name of the property. If you would
Error messages may include an `{attribute}` placeholder that is replaced with the name of the property. If you would
like the name to be replaced with a custom value, you can specify it using the `Label` attribute:

```php
Expand Down
66 changes: 33 additions & 33 deletions messages/ru/yii-validator.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,19 @@
'{min, plural, one{должен} few{должны} many{должны} other{должны}} быть ' .
'заполнены: {attributes}.',
/** @see BooleanValue */
'{label} must be either "{true}" or "{false}".' => '{label} должно быть «{true}» или «{false}».',
'{attribute} must be either "{true}" or "{false}".' => '{attribute} должно быть «{true}» или «{false}».',
/** @see Count */
'{label} must be an array or implement \Countable interface.' => '{label} должно быть массивом или объектом, реализующим интерфейс \Countable.',
'{label} must contain at least {min, number} {min, plural, one{item} other{items}}.' => '{label} должно содержать как минимум {min, number} {min, plural, one{элемент} few{элемента} many{элементов} other{элементов}}.',
'{label} must contain at most {max, number} {max, plural, one{item} other{items}}.' => '{label} должно содержать не более {max, number} {max, plural, one{элемента} few{элементов} many{элементов} other{элементов}}.',
'{label} must contain exactly {exactly, number} {exactly, plural, one{item} other{items}}.' => '{label} должно содержать ровно {exactly, number} {exactly, plural, one{элемент} few{элемента} many{элементов} other{элементов}}.',
'{attribute} must be an array or implement \Countable interface.' => '{attribute} должно быть массивом или объектом, реализующим интерфейс \Countable.',
'{attribute} must contain at least {min, number} {min, plural, one{item} other{items}}.' => '{attribute} должно содержать как минимум {min, number} {min, plural, one{элемент} few{элемента} many{элементов} other{элементов}}.',
'{attribute} must contain at most {max, number} {max, plural, one{item} other{items}}.' => '{attribute} должно содержать не более {max, number} {max, plural, one{элемента} few{элементов} many{элементов} other{элементов}}.',
'{attribute} must contain exactly {exactly, number} {exactly, plural, one{item} other{items}}.' => '{attribute} должно содержать ровно {exactly, number} {exactly, plural, one{элемент} few{элемента} many{элементов} other{элементов}}.',
/** @see Each */
'{label} must be array or iterable.' => '{label} должно быть массивом или иметь псевдотип iterable.',
'{attribute} must be array or iterable.' => '{attribute} должно быть массивом или иметь псевдотип iterable.',
'Every iterable key must have an integer or a string type.' => 'Ключ должен иметь тип integer или string.',
/** @see Email */
'{label} is not a valid email address.' => '{label} не является правильным адресом электронной почты.',
'{attribute} is not a valid email address.' => '{attribute} не является правильным адресом электронной почты.',
/** @see In */
'{label} is not in the list of acceptable values.' => '{label} не в списке допустимых значений.',
'{attribute} is not in the list of acceptable values.' => '{attribute} не в списке допустимых значений.',
/** @see Ip */
'Must be a valid IP address.' => 'Должно быть правильным IP-адресом.',
'Must not be an IPv4 address.' => 'Не должно быть IPv4-адресом.',
Expand All @@ -60,33 +60,33 @@
'Must not be a subnet.' => 'Не должно быть подсетью.',
'Is not in the allowed range.' => 'Не входит в список разрешенных диапазонов адресов.',
/** @see Integer */
'{label} must be an integer.' => '{label} должно быть целым числом.',
'{attribute} must be an integer.' => '{attribute} должно быть целым числом.',
/** @see Json */
'{label} is not JSON.' => '{label} не является строкой JSON.',
'{attribute} is not JSON.' => '{attribute} не является строкой JSON.',
/** @see Length */
'{label} must contain at least {min, number} {min, plural, one{character} other{characters}}.' => '{label} должно содержать как минимум {min, number} {min, plural, one{символ} few{символа} many{символов} other{символов}}.',
'{label} must contain at most {max, number} {max, plural, one{character} other{characters}}.' => '{label} должно содержать не более {max, number} {max, plural, one{символа} few{символов} many{символов} other{символов}}.',
'{label} must contain exactly {exactly, number} {exactly, plural, one{character} other{characters}}.' => '{label} должно содержать ровно {exactly, number} {exactly, plural, one{символ} few{символа} many{символов} other{символов}}.',
'{attribute} must contain at least {min, number} {min, plural, one{character} other{characters}}.' => '{attribute} должно содержать как минимум {min, number} {min, plural, one{символ} few{символа} many{символов} other{символов}}.',
'{attribute} must contain at most {max, number} {max, plural, one{character} other{characters}}.' => '{attribute} должно содержать не более {max, number} {max, plural, one{символа} few{символов} many{символов} other{символов}}.',
'{attribute} must contain exactly {exactly, number} {exactly, plural, one{character} other{characters}}.' => '{attribute} должно содержать ровно {exactly, number} {exactly, plural, one{символ} few{символа} many{символов} other{символов}}.',
/** @see Nested */
'Nested rule without rules can be used for objects only.' => 'Правило Nested без указания правил может использоваться только для объектов.',
'An object data set data can only have an array type.' => 'Данные в объекте должны быть массивом.',
'Property "{path}" is not found.' => 'Свойство «{path}» не найдено.',
/** @see Number */
'{label} must be a number.' => '{label} должно быть числом.',
'{attribute} must be a number.' => '{attribute} должно быть числом.',
/** @see OneOf */
'Exactly 1 attribute from this list must be filled: {attributes}.' => 'Ровно 1 атрибут из этого списка должен быть заполнен: {attributes}.',
/** @see Regex */
'{label} is invalid.' => 'Значение неверно.',
'{attribute} is invalid.' => 'Значение неверно.',
/** @see Required */
'{label} cannot be blank.' => '{label} не может быть пустым.',
'{label} not passed.' => '{label} не передано.',
'{attribute} cannot be blank.' => '{attribute} не может быть пустым.',
'{attribute} not passed.' => '{attribute} не передано.',
/** @see Subset */
'{label} must be iterable.' => '{label} должно быть итерируемым.',
'{label} is not a subset of acceptable values.' => '{label} не является подмножеством допустимых значений.',
'{attribute} must be iterable.' => '{attribute} должно быть итерируемым.',
'{attribute} is not a subset of acceptable values.' => '{attribute} не является подмножеством допустимых значений.',
/** @see TrueValue */
'{label} must be "{true}".' => '{label} должно быть «{true}».',
'{attribute} must be "{true}".' => '{attribute} должно быть «{true}».',
/** @see Url */
'{label} is not a valid URL.' => '{label} не является правильным URL.',
'{attribute} is not a valid URL.' => '{attribute} не является правильным URL.',

// Used in multiple rules

Expand All @@ -95,7 +95,7 @@
* @see Nested
* @see OneOf
*/
'{label} must be an array or an object.' => '{label} должно быть массивом или объектом.',
'{attribute} must be an array or an object.' => '{attribute} должно быть массивом или объектом.',
/**
* @see BooleanValue
* @see TrueValue
Expand All @@ -112,14 +112,14 @@
*/
'The allowed types are integer, float, string, boolean, null and object implementing \Stringable or \DateTimeInterface.' => 'Разрешённые типы: integer, float, string, boolean, null и объект, реализующий интерфейс \Stringable или \DateTimeInterface.',
'The attribute value returned from a custom data set must have one of the following types: integer, float, string, boolean, null or an object implementing \Stringable interface or \DateTimeInterface.' => 'Значение, получаемое из пользовательского набора данных, должно иметь один из следующих типов: integer, float, string, bool, null или объект, реализующий интерфейс \Stringable или \DateTimeInterface.',
'{label} must be equal to "{targetValueOrAttribute}".' => '{label} должно быть равно «{targetValueOrAttribute}».',
'{label} must be strictly equal to "{targetValueOrAttribute}".' => '{label} должно быть строго равно «{targetValueOrAttribute}».',
'{label} must not be equal to "{targetValueOrAttribute}".' => '{label} не должно быть равно «{targetValueOrAttribute}».',
'{label} must not be strictly equal to "{targetValueOrAttribute}".' => '{label} не должно быть строго равно «{targetValueOrAttribute}».',
'{label} must be greater than "{targetValueOrAttribute}".' => '{label} должно быть больше, чем «{targetValueOrAttribute}».',
'{label} must be greater than or equal to "{targetValueOrAttribute}".' => '{label} должно быть больше или равно «{targetValueOrAttribute}».',
'{label} must be less than "{targetValueOrAttribute}".' => '{label} должно быть меньше, чем «{targetValueOrAttribute}».',
'{label} must be less than or equal to "{targetValueOrAttribute}".' => '{label} должно быть меньше или равно «{targetValueOrAttribute}».',
'{attribute} must be equal to "{targetValueOrAttribute}".' => '{attribute} должно быть равно «{targetValueOrAttribute}».',
'{attribute} must be strictly equal to "{targetValueOrAttribute}".' => '{attribute} должно быть строго равно «{targetValueOrAttribute}».',
'{attribute} must not be equal to "{targetValueOrAttribute}".' => '{attribute} не должно быть равно «{targetValueOrAttribute}».',
'{attribute} must not be strictly equal to "{targetValueOrAttribute}".' => '{attribute} не должно быть строго равно «{targetValueOrAttribute}».',
'{attribute} must be greater than "{targetValueOrAttribute}".' => '{attribute} должно быть больше, чем «{targetValueOrAttribute}».',
'{attribute} must be greater than or equal to "{targetValueOrAttribute}".' => '{attribute} должно быть больше или равно «{targetValueOrAttribute}».',
'{attribute} must be less than "{targetValueOrAttribute}".' => '{attribute} должно быть меньше, чем «{targetValueOrAttribute}».',
'{attribute} must be less than or equal to "{targetValueOrAttribute}".' => '{attribute} должно быть меньше или равно «{targetValueOrAttribute}».',
/**
* @see Email
* @see Ip
Expand All @@ -128,12 +128,12 @@
* @see Regex
* @see Url
*/
'{label} must be a string.' => '{label} должно быть строкой.',
'{attribute} must be a string.' => '{attribute} должно быть строкой.',
/**
* @see Number
* @see Integer
*/
'The allowed types are integer, float and string.' => 'Разрешённые типы: integer, float и string.',
'{label} must be no less than {min}.' => '{label} должно быть не меньше {min}.',
'{label} must be no greater than {max}.' => '{label} должно быть не больше {max}.',
'{attribute} must be no less than {min}.' => '{attribute} должно быть не меньше {min}.',
'{attribute} must be no greater than {max}.' => '{attribute} должно быть не больше {max}.',
];
4 changes: 2 additions & 2 deletions src/Label.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
final class Label
{
public function __construct(
private ?string $label = null,
private string $label,
) {
}

public function getLabel(): ?string
public function getLabel(): string
{
return $this->label;
}
Expand Down
16 changes: 8 additions & 8 deletions src/Rule/AbstractCompare.php
Original file line number Diff line number Diff line change
Expand Up @@ -260,14 +260,14 @@ public function getIncorrectDataSetTypeMessage(): string
public function getMessage(): string
{
return $this->message ?? match ($this->operator) {
'==', => '{label} must be equal to "{targetValueOrAttribute}".',
'===' => '{label} must be strictly equal to "{targetValueOrAttribute}".',
'!=' => '{label} must not be equal to "{targetValueOrAttribute}".',
'!==' => '{label} must not be strictly equal to "{targetValueOrAttribute}".',
'>' => '{label} must be greater than "{targetValueOrAttribute}".',
'>=' => '{label} must be greater than or equal to "{targetValueOrAttribute}".',
'<' => '{label} must be less than "{targetValueOrAttribute}".',
'<=' => '{label} must be less than or equal to "{targetValueOrAttribute}".',
'==', => '{attribute} must be equal to "{targetValueOrAttribute}".',
'===' => '{attribute} must be strictly equal to "{targetValueOrAttribute}".',
'!=' => '{attribute} must not be equal to "{targetValueOrAttribute}".',
'!==' => '{attribute} must not be strictly equal to "{targetValueOrAttribute}".',
'>' => '{attribute} must be greater than "{targetValueOrAttribute}".',
'>=' => '{attribute} must be greater than or equal to "{targetValueOrAttribute}".',
'<' => '{attribute} must be less than "{targetValueOrAttribute}".',
'<=' => '{attribute} must be less than or equal to "{targetValueOrAttribute}".',
};
}

Expand Down
4 changes: 2 additions & 2 deletions src/Rule/AbstractNumber.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ abstract class AbstractNumber implements
/**
* A default for {@see $lessThanMinMessage}.
*/
protected const DEFAULT_LESS_THAN_MIN_MESSAGE = '{label} must be no less than {min}.';
protected const DEFAULT_LESS_THAN_MIN_MESSAGE = '{attribute} must be no less than {min}.';
/**
* A default for {@see $greaterThanMaxMessage}.
*/
protected const DEFAULT_GREATER_THAN_MAX_MESSAGE = '{label} must be no greater than {max}.';
protected const DEFAULT_GREATER_THAN_MAX_MESSAGE = '{attribute} must be no greater than {max}.';

/**
* @var string The regular expression for matching numbers.
Expand Down
2 changes: 1 addition & 1 deletion src/Rule/AtLeast.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ final class AtLeast implements DumpedRuleInterface, SkipOnErrorInterface, WhenIn
public function __construct(
private array $attributes,
private int $min = 1,
private string $incorrectInputMessage = '{label} must be an array or an object.',
private string $incorrectInputMessage = '{attribute} must be an array or an object.',
private string $message = 'At least {min, number} {min, plural, one{attribute} other{attributes}} from this ' .
'list must be filled: {attributes}.',
private mixed $skipOnEmpty = null,
Expand Down
1 change: 0 additions & 1 deletion src/Rule/AtLeastHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ public function validate(mixed $value, object $rule, ValidationContext $context)
if (!is_array($value) && !is_object($value)) {
return $result->addError($rule->getIncorrectInputMessage(), [
'attribute' => $context->getTranslatedAttribute(),
'label' => $context->getTranslatedLabel(),
'type' => get_debug_type($value),
]);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Rule/BooleanValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public function __construct(
private int|float|string|bool $falseValue = '0',
private bool $strict = false,
private string $incorrectInputMessage = 'The allowed types are integer, float, string, boolean. {type} given.',
private string $message = '{label} must be either "{true}" or "{false}".',
private string $message = '{attribute} must be either "{true}" or "{false}".',
private mixed $skipOnEmpty = null,
private bool $skipOnError = false,
private Closure|null $when = null,
Expand Down
1 change: 0 additions & 1 deletion src/Rule/BooleanValueHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ private function getCommonResultParameters(BooleanValue $rule, ValidationContext
{
return [
'attribute' => $context->getTranslatedAttribute(),
'label' => $context->getTranslatedLabel(),
'true' => $rule->getTrueValue() === true ? 'true' : $rule->getTrueValue(),
'false' => $rule->getFalseValue() === false ? 'false' : $rule->getFalseValue(),
];
Expand Down
2 changes: 0 additions & 2 deletions src/Rule/CompareHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public function validate(mixed $value, object $rule, ValidationContext $context)
if (!$this->isInputCorrect($rule->getType(), $value)) {
return $result->addError($rule->getIncorrectInputMessage(), [
'attribute' => $context->getTranslatedAttribute(),
'label' => $context->getTranslatedLabel(),
'type' => get_debug_type($value),
]);
}
Expand All @@ -62,7 +61,6 @@ public function validate(mixed $value, object $rule, ValidationContext $context)

return (new Result())->addError($rule->getMessage(), [
'attribute' => $context->getTranslatedAttribute(),
'label' => $context->getTranslatedLabel(),
'targetValue' => $this->getFormattedValue($rule->getTargetValue()),
'targetAttribute' => $targetAttribute,
'targetAttributeValue' => $targetAttribute !== null ? $this->getFormattedValue($targetValue) : null,
Expand Down
Loading

0 comments on commit a952cad

Please sign in to comment.