Skip to content

Instantly share code, notes, and snippets.

@henriquemoody
Last active December 6, 2024 15:14
Show Gist options
  • Save henriquemoody/05f1d08a7812a54c4aa2569bbe3ea99c to your computer and use it in GitHub Desktop.
Save henriquemoody/05f1d08a7812a54c4aa2569bbe3ea99c to your computer and use it in GitHub Desktop.
Translate Respect\Validation messages with OpenAI
<?php
declare(strict_types=1);
return [
'{{name}} must be an infinite number' => '{{name}} deve ser um número infinito',
'{{name}} must not be an infinite number' => '{{name}} não deve ser um número infinito',
'{{name}} must be a valid email address' => '{{name}} deve ser um endereço de e-mail válido',
'{{name}} must not be an email address' => '{{name}} não deve ser um endereço de e-mail',
'{{name}} must be a perfect square number' => '{{name}} deve ser um número quadrado perfeito',
'{{name}} must not be a perfect square number' => '{{name}} não deve ser um número quadrado perfeito',
'As the minimum from {{name}},' => 'Como o mínimo de {{name}},',
'The minimum from' => 'O mínimo de',
'{{name}} must be a valid domain' => '{{name}} deve ser um domínio válido',
'{{name}} must not be a valid domain' => '{{name}} não deve ser um domínio válido',
'{{name}} must be a countable value' => '{{name}} deve ser um valor contável',
'{{name}} must not be a countable value' => '{{name}} não deve ser um valor contável',
'{{name}} must be equal to {{compareTo}}' => '{{name}} deve ser igual a {{compareTo}}',
'{{name}} must not be equal to {{compareTo}}' => '{{name}} não deve ser igual a {{compareTo}}',
'{{name}} must be greater than or equal to {{compareTo}}' => '{{name}} deve ser maior ou igual a {{compareTo}}',
'{{name}} must be less than {{compareTo}}' => '{{name}} deve ser menor que {{compareTo}}',
'{{name}} must be a numeric value' => '{{name}} deve ser um valor numérico',
'{{name}} must not be a numeric value' => '{{name}} não deve ser um valor numérico',
'or must be null' => 'ou deve ser nulo',
'and must not be null' => 'e não deve ser nulo',
'{{name}} must be an instance of `{{class|raw}}`' => '{{name}} deve ser uma instância de `{{class|raw}}`',
'{{name}} must not be an instance of `{{class|raw}}`' => '{{name}} não deve ser uma instância de `{{class|raw}}`',
'None of these rules must pass for {{name}}' => 'Nenhuma dessas regras deve ser válida para {{name}}',
'All of these rules must pass for {{name}}' => 'Todas essas regras devem ser válidas para {{name}}',
'{{name}} must be a valid leap date' => '{{name}} deve ser uma data bissexta válida',
'{{name}} must not be a leap date' => '{{name}} não deve ser uma data bissexta',
'{{name}} must be a valid Luhn number' => '{{name}} deve ser um número de Luhn válido',
'{{name}} must not be a valid Luhn number' => '{{name}} não deve ser um número de Luhn válido',
'{{name}} must not be less than {{compareTo}}' => '{{name}} não deve ser menor que {{compareTo}}',
'{{name}} must be a valid time in the format {{sample}}' => '{{name}} deve ser um horário válido no formato {{sample}}',
'{{name}} must not be a valid time in the format {{sample}}' => '{{name}} não deve ser um horário válido no formato {{sample}}',
'{{name}} must be a valid language code' => '{{name}} deve ser um código de idioma válido',
'{{name}} must not be a valid language code' => '{{name}} não deve ser um código de idioma válido',
'{{name}} must be a hex RGB color' => '{{name}} deve ser uma cor RGB hex',
'{{name}} must not be a hex RGB color' => '{{name}} não deve ser uma cor RGB hex',
'{{name}} must consist of vowels only' => '{{name}} deve consistir apenas de vogais',
'{{name}} must not consist of vowels only' => '{{name}} não deve consistir apenas de vogais',
'{{name}} must consist of vowels and {{additionalChars}}' => '{{name}} deve consistir de vogais e {{additionalChars}}',
'{{name}} must not consist of vowels or {{additionalChars}}' => '{{name}} não deve consistir de vogais ou {{additionalChars}}',
'{{name}} must be similar to "No"' => '{{name}} deve ser semelhante a "No"',
'{{name}} must not be similar to "No"' => '{{name}} não deve ser semelhante a "No"',
'{{name}} must be a valid Polish Identity Card number' => '{{name}} deve ser um número válido de Cartão de Identidade Polonês',
'{{name}} must not be a valid Polish Identity Card number' => '{{name}} não deve ser um número válido de Cartão de Identidade Polonês',
'{{name}} must be an iterable value' => '{{name}} deve ser um valor iterável',
'{{name}} must not be an iterable value' => '{{name}} não deve ser um valor iterável',
'{{name}} must be a valid number' => '{{name}} deve ser um número válido',
'{{name}} must not be a number' => '{{name}} não deve ser um número',
'{{name}} must contain only space characters' => '{{name}} deve conter apenas espaços',
'{{name}} must not contain space characters' => '{{name}} não deve conter espaços',
'{{name}} must contain only space characters and {{additionalChars}}' => '{{name}} deve conter apenas espaços e {{additionalChars}}',
'{{name}} must not contain space characters or {{additionalChars}}' => '{{name}} não deve conter espaços ou {{additionalChars}}',
'{{name}} must match the pattern `{{regex|raw}}`' => '{{name}} deve corresponder ao padrão `{{regex|raw}}`',
'{{name}} must not match the pattern `{{regex|raw}}`' => '{{name}} não deve corresponder ao padrão `{{regex|raw}}`',
'{{name}} must be a finite number' => '{{name}} deve ser um número finito',
'{{name}} must not be a finite number' => '{{name}} não deve ser um número finito',
'{{name}} must have the {{mimetype}} MIME type' => '{{name}} deve ter o tipo de mídia {{mimetype}}',
'{{name}} must not have the {{mimetype}} MIME type' => '{{name}} não deve ter o tipo de mídia {{mimetype}}',
'{{name}} must be a valid JSON string' => '{{name}} deve ser uma string JSON válida',
'{{name}} must not be a valid JSON string' => '{{name}} não deve ser uma string JSON válida',
'{{name}} must be a valid CPF number' => '{{name}} deve ser um número de CPF válido',
'{{name}} must not be a valid CPF number' => '{{name}} não deve ser um número de CPF válido',
'{{name}} must be a resource' => '{{name}} deve ser um recurso',
'{{name}} must not be a resource' => '{{name}} não deve ser um recurso',
'{{name}} must be valid' => '{{name}} deve ser válido',
'{{name}} must be invalid' => '{{name}} deve ser inválido',
'Each item in {{name}} must be valid' => 'Cada item em {{name}} deve ser válido',
'Each item in {{name}} must be invalid' => 'Cada item em {{name}} deve ser inválido',
'{{name}} must be a valid Roman numeral' => '{{name}} deve ser um numeral romano válido',
'{{name}} must not be a valid Roman numeral' => '{{name}} não deve ser um numeral romano válido',
'{{name}} must only contain characters from the {{charset|raw}} charset' => '{{name}} deve conter apenas caracteres do conjunto de caracteres {{charset|raw}}',
'{{name}} must not contain any characters from the {{charset|raw}} charset' => '{{name}} não deve conter nenhum caractere do conjunto de caracteres {{charset|raw}}',
'or must be undefined' => 'ou deve ser indefinido',
'and must not be undefined' => 'e não deve ser indefinido',
'{{name}} must be in {{haystack}}' => '{{name}} deve estar em {{haystack}}',
'{{name}} must not be in {{haystack}}' => '{{name}} não deve estar em {{haystack}}',
'{{name}} must be a valid country code' => '{{name}} deve ser um código de país válido',
'{{name}} must not be a valid country code' => '{{name}} não deve ser um código de país válido',
'{{name}} must be a valid PHP label' => '{{name}} deve ser um rótulo PHP válido',
'{{name}} must not be a valid PHP label' => '{{name}} não deve ser um rótulo PHP válido',
'{{name}} must not contain duplicates' => '{{name}} não deve conter duplicatas',
'{{name}} must contain duplicates' => '{{name}} deve conter duplicatas',
'{{name}} must be greater than {{minValue}} and less than {{maxValue}}' => '{{name}} deve ser maior que {{minValue}} e menor que {{maxValue}}',
'{{name}} must not be greater than {{minValue}} or less than {{maxValue}}' => '{{name}} não deve ser maior que {{minValue}} ou menor que {{maxValue}}',
'The value must be defined' => 'O valor deve ser definido',
'The value must be undefined' => 'O valor deve ser indefinido',
'{{name}} must be defined' => '{{name}} deve ser definido',
'{{name}} must be undefined' => '{{name}} deve ser indefinido',
'{{name}} must be a valid file' => '{{name}} deve ser um arquivo válido',
'{{name}} must be an invalid file' => '{{name}} deve ser um arquivo inválido',
'{{name}} must only contain control characters' => '{{name}} deve conter apenas caracteres de controle',
'{{name}} must not contain control characters' => '{{name}} não deve conter caracteres de controle',
'{{name}} must only contain control characters and {{additionalChars}}' => '{{name}} deve conter apenas caracteres de controle e {{additionalChars}}',
'{{name}} must not contain control characters or {{additionalChars}}' => '{{name}} não deve conter caracteres de controle ou {{additionalChars}}',
'{{name}} must contain only lowercase letters' => '{{name}} deve conter apenas letras minúsculas',
'{{name}} must not contain only lowercase letters' => '{{name}} não deve conter apenas letras minúsculas',
'{{name}} must be an uploaded file' => '{{name}} deve ser um arquivo enviado',
'{{name}} must not be an uploaded file' => '{{name}} não deve ser um arquivo enviado',
'Only one of these rules must pass for {{name}}' => 'Apenas uma dessas regras deve ser atendida para {{name}}',
'Only one of these rules must not pass for {{name}}' => 'Apenas uma dessas regras não deve ser atendida para {{name}}',
'{{name}} must be a public domain suffix' => '{{name}} deve ser um sufixo de domínio público',
'{{name}} must not be a public domain suffix' => '{{name}} não deve ser um sufixo de domínio público',
'{{name}} must be writable' => '{{name}} deve ser gravável',
'{{name}} must not be writable' => '{{name}} não deve ser gravável',
'{{name}} is invalid' => '{{name}} é inválido',
'{{name}} is valid' => '{{name}} é válido',
'{{name}} must be a valid UUID' => '{{name}} deve ser um UUID válido',
'{{name}} must not be a valid UUID' => '{{name}} não deve ser um UUID válido',
'{{name}} must be a valid UUID version {{version|raw}}' => '{{name}} deve ser um UUID válido na versão {{version|raw}}',
'{{name}} must not be a valid UUID version {{version|raw}}' => '{{name}} não deve ser um UUID válido na versão {{version|raw}}',
'{{name}} must evaluate to `false`' => '{{name}} deve avaliar para `false`',
'{{name}} must not evaluate to `false`' => '{{name}} não deve avaliar para `false`',
'{{name}} must be a valid BSN' => '{{name}} deve ser um BSN válido',
'{{name}} must not be a valid BSN' => '{{name}} não deve ser um BSN válido',
'{{name}} must be a factor of {{dividend|raw}}' => '{{name}} deve ser um fator de {{dividend|raw}}',
'{{name}} must not be a factor of {{dividend|raw}}' => '{{name}} não deve ser um fator de {{dividend|raw}}',
'The number of {{type|raw}} between {{now|raw}} and' => 'O número de {{type|raw}} entre {{now|raw}} e',
'{{name}} must be present' => '{{name}} deve estar presente',
'{{name}} must not be present' => '{{name}} não deve estar presente',
'{{name}} must be a valid top-level domain name' => '{{name}} deve ser um nome de domínio de nível superior válido',
'{{name}} must not be a valid top-level domain name' => '{{name}} não deve ser um nome de domínio de nível superior válido',
'{{name}} must be null' => '{{name}} deve ser nulo',
'{{name}} must not be null' => '{{name}} não deve ser nulo',
'{{name}} must be similar to "Yes"' => '{{name}} deve ser similar a "Yes"',
'{{name}} must not be similar to "Yes"' => '{{name}} não deve ser similar a "Yes"',
'{{name}} must be sorted in ascending order' => '{{name}} deve estar ordenado em ordem crescente',
'{{name}} must not be sorted in ascending order' => '{{name}} não deve estar ordenado em ordem crescente',
'{{name}} must be sorted in descending order' => '{{name}} deve estar ordenado em ordem decrescente',
'{{name}} must not be sorted in descending order' => '{{name}} não deve estar ordenado em ordem decrescente',
'{{name}} must be an array' => '{{name}} deve ser um array',
'{{name}} must not be an array' => '{{name}} não deve ser um array',
'{{name}} must be an object' => '{{name}} deve ser um objeto',
'{{name}} must not be an object' => '{{name}} não deve ser um objeto',
'{{name}} must be a Portuguese NIF' => '{{name}} deve ser um NIF português',
'{{name}} must not be a Portuguese NIF' => '{{name}} não deve ser um NIF português',
'{{name}} must be a valid postal code on {{countryCode}}' => '{{name}} deve ser um código postal válido em {{countryCode}}',
'{{name}} must not be a valid postal code on {{countryCode}}' => '{{name}} não deve ser um código postal válido em {{countryCode}}',
'{{name}} must be a valid NIF' => '{{name}} deve ser um NIF válido',
'{{name}} must not be a valid NIF' => '{{name}} não deve ser um NIF válido',
'{{name}} must be a URL' => '{{name}} deve ser uma URL',
'{{name}} must not be a URL' => '{{name}} não deve ser uma URL',
'{{name}} must be a scalar value' => '{{name}} deve ser um valor escalar',
'{{name}} must not be a scalar value' => '{{name}} não deve ser um valor escalar',
'As the maximum of {{name}},' => 'Como o máximo de {{name}},',
'The maximum of' => 'O máximo de',
'{{name}} must be a subdivision code of {{countryName|trans}}' => '{{name}} deve ser um código de subdivisão de {{countryName|trans}}',
'{{name}} must not be a subdivision code of {{countryName|trans}}' => '{{name}} não deve ser um código de subdivisão de {{countryName|trans}}',
'{{name}} must be a prime number' => '{{name}} deve ser um número primo',
'{{name}} must not be a prime number' => '{{name}} não deve ser um número primo',
'{{name}} must contain only graphical characters' => '{{name}} deve conter apenas caracteres gráficos',
'{{name}} must not contain graphical characters' => '{{name}} não deve conter caracteres gráficos',
'{{name}} must contain only graphical characters and {{additionalChars}}' => '{{name}} deve conter apenas caracteres gráficos e {{additionalChars}}',
'{{name}} must not contain graphical characters or {{additionalChars}}' => '{{name}} não deve conter caracteres gráficos ou {{additionalChars}}',
'{{name}} must be a callable' => '{{name}} deve ser um callable',
'{{name}} must not be a callable' => '{{name}} não deve ser um callable',
'{{name}} must be a valid NFe access key' => '{{name}} deve ser uma chave de acesso NFe válida',
'{{name}} must not be a valid NFe access key' => '{{name}} não deve ser uma chave de acesso NFe válida',
'{{name}} must be a valid MAC address' => '{{name}} deve ser um endereço MAC válido',
'{{name}} must not be a valid MAC address' => '{{name}} não deve ser um endereço MAC válido',
'{{name}} must be a valid Polish VAT identification number' => '{{name}} deve ser um número de identificação de IVA polonês válido',
'{{name}} must not be a valid Polish VAT identification number' => '{{name}} não deve ser um número de identificação de IVA polonês válido',
'{{name}} must be a valid Finnish personal identity code' => '{{name}} deve ser um código de identidade pessoal finlandês válido',
'{{name}} must not be a valid Finnish personal identity code' => '{{name}} não deve ser um código de identidade pessoal finlandês válido',
'{{name}} must be an integer' => '{{name}} deve ser um número inteiro',
'{{name}} must not be an integer' => '{{name}} não deve ser um número inteiro',
'{{name}} must be a multiple of {{multipleOf}}' => '{{name}} deve ser um múltiplo de {{multipleOf}}',
'{{name}} must not be a multiple of {{multipleOf}}' => '{{name}} não deve ser um múltiplo de {{multipleOf}}',
'{{name}} must not contain an emoji' => '{{name}} não deve conter um emoji',
'{{name}} must contain an emoji' => '{{name}} deve conter um emoji',
'{{name}} must be a negative number' => '{{name}} deve ser um número negativo',
'{{name}} must not be a negative number' => '{{name}} não deve ser um número negativo',
'{{name}} must be a valid CNPJ number' => '{{name}} deve ser um número de CNPJ válido',
'{{name}} must not be a valid CNPJ number' => '{{name}} não deve ser um número de CNPJ válido',
'{{name}} must be identical to {{compareTo}}' => '{{name}} deve ser idêntico a {{compareTo}}',
'{{name}} must not be identical to {{compareTo}}' => '{{name}} não deve ser idêntico a {{compareTo}}',
'{{name}} must be a valid IBAN' => '{{name}} deve ser um IBAN válido',
'{{name}} must not be a valid IBAN' => '{{name}} não deve ser um IBAN válido',
'{{name}} must be a float value' => '{{name}} deve ser um valor float',
'{{name}} must not be a float value' => '{{name}} não deve ser um valor float',
'{{name}} must be a valid Fibonacci number' => '{{name}} deve ser um número de Fibonacci válido',
'{{name}} must not be a valid Fibonacci number' => '{{name}} não deve ser um número de Fibonacci válido',
'{{name}} must be a valid date in the format {{sample}}' => '{{name}} deve ser uma data válida no formato {{sample}}',
'{{name}} must not be a valid date in the format {{sample}}' => '{{name}} não deve ser uma data válida no formato {{sample}}',
'{{name}} must be a version' => '{{name}} deve ser uma versão',
'{{name}} must not be a version' => '{{name}} não deve ser uma versão',
'{{name}} must be a valid IMEI number' => '{{name}} deve ser um número de IMEI válido',
'{{name}} must not be a valid IMEI number' => '{{name}} não deve ser um número de IMEI válido',
'{{name}} must be a number in base {{base|raw}}' => '{{name}} deve ser um número na base {{base|raw}}',
'{{name}} must not be a number in base {{base|raw}}' => '{{name}} não deve ser um número na base {{base|raw}}',
'{{name}} must be a valid CNH number' => '{{name}} deve ser um número de CNH válido',
'{{name}} must not be a valid CNH number' => '{{name}} não deve ser um número de CNH válido',
'{{name}} must not contain whitespaces' => '{{name}} não deve conter espaços em branco',
'{{name}} must contain at least one whitespace' => '{{name}} deve conter pelo menos um espaço em branco',
'{{name}} must be float' => '{{name}} deve ser um número decimal',
'{{name}} must not be float' => '{{name}} não deve ser um número decimal',
'{{name}} must be a directory' => '{{name}} deve ser um diretório',
'{{name}} must not be a directory' => '{{name}} não deve ser um diretório',
'{{name}} must be between {{minValue}} and {{maxValue}}' => '{{name}} deve estar entre {{minValue}} e {{maxValue}}',
'{{name}} must not be between {{minValue}} and {{maxValue}}' => '{{name}} não deve estar entre {{minValue}} e {{maxValue}}',
'At least one of these rules must pass for {{name}}' => 'Pelo menos uma dessas regras deve ser válida para {{name}}',
'At least one of these rules must not pass for {{name}}' => 'Pelo menos uma dessas regras não deve ser válida para {{name}}',
'{{name}} must be a valid slug' => '{{name}} deve ser um slug válido',
'{{name}} must not be a valid slug' => '{{name}} não deve ser um slug válido',
'{{name}} must be a valid ISBN' => '{{name}} deve ser um ISBN válido',
'{{name}} must not be a valid ISBN' => '{{name}} não deve ser um ISBN válido',
'{{name}} must start with {{startValue}}' => '{{name}} deve começar com {{startValue}}',
'{{name}} must not start with {{startValue}}' => '{{name}} não deve começar com {{startValue}}',
'{{name}} must be an even number' => '{{name}} deve ser um número par',
'{{name}} must be an odd number' => '{{name}} deve ser um número ímpar',
'{{name}} must be readable' => '{{name}} deve ser legível',
'{{name}} must not be readable' => '{{name}} não deve ser legível',
'{{name}} must be an integer value' => '{{name}} deve ser um valor inteiro',
'{{name}} must not be an integer value' => '{{name}} não deve ser um valor inteiro',
'{{input}} must be a suitable argument for {{callable}}' => '{{input}} deve ser um argumento adequado para {{callable}}',
'{{input}} must not be a suitable argument for {{callable}}' => '{{input}} não deve ser um argumento adequado para {{callable}}',
'{{name}} must be an array value' => '{{name}} deve ser um valor de array',
'{{name}} must not be an array value' => '{{name}} não deve ser um valor de array',
'{{name}} must contain at least one value from {{needles}}' => '{{name}} deve conter pelo menos um valor de {{needles}}',
'{{name}} must not contain any value from {{needles}}' => '{{name}} não deve conter nenhum valor de {{needles}}',
'{{name}} must be less than or equal to {{compareTo}}' => '{{name}} deve ser menor ou igual a {{compareTo}}',
'{{name}} must be greater than {{compareTo}}' => '{{name}} deve ser maior que {{compareTo}}',
'{{name}} must be an existing file' => '{{name}} deve ser um arquivo existente',
'{{name}} must not be an existing file' => '{{name}} não deve ser um arquivo existente',
'The length of' => 'O tamanho de',
'{{name}} must not be valid' => '{{name}} não deve ser válido',
'{{name}} must evaluate to `true`' => '{{name}} deve avaliar para `true`',
'{{name}} must not evaluate to `true`' => '{{name}} não deve avaliar para `true`',
'{{name}} must be a boolean value' => '{{name}} deve ser um valor booleano',
'{{name}} must not be a boolean value' => '{{name}} não deve ser um valor booleano',
'{{name}} must be a valid leap year' => '{{name}} deve ser um ano bissexto válido',
'{{name}} must not be a leap year' => '{{name}} não deve ser um ano bissexto',
'{{name}} must be a string value' => '{{name}} deve ser um valor de string',
'{{name}} must not be a string value' => '{{name}} não deve ser um valor de string',
'{{name}} must only contain consonants' => '{{name}} deve conter apenas consoantes',
'{{name}} must not contain consonants' => '{{name}} não deve conter consoantes',
'{{name}} must only contain consonants and {{additionalChars}}' => '{{name}} deve conter apenas consoantes e {{additionalChars}}',
'{{name}} must not contain consonants or {{additionalChars}}' => '{{name}} não deve conter consoantes ou {{additionalChars}}',
'{{name}} must contain only uppercase letters' => '{{name}} deve conter apenas letras maiúsculas',
'{{name}} must not contain only uppercase letters' => '{{name}} não deve conter apenas letras maiúsculas',
'{{name}} must end with {{endValue}}' => '{{name}} deve terminar com {{endValue}}',
'{{name}} must not end with {{endValue}}' => '{{name}} não deve terminar com {{endValue}}',
'{{name}} must be equivalent to {{compareTo}}' => '{{name}} deve ser equivalente a {{compareTo}}',
'{{name}} must not be equivalent to {{compareTo}}' => '{{name}} não deve ser equivalente a {{compareTo}}',
'{{name}} must have {{extension}} extension' => '{{name}} deve ter a extensão {{extension}}',
'{{name}} must not have {{extension}} extension' => '{{name}} não deve ter a extensão {{extension}}',
'{{name}} must be a valid currency code' => '{{name}} deve ser um código de moeda válido',
'{{name}} must not be a valid currency code' => '{{name}} não deve ser um código de moeda válido',
'{{name}} must contain {{containsValue}}' => '{{name}} deve conter {{containsValue}}',
'{{name}} must not contain {{containsValue}}' => '{{name}} não deve conter {{containsValue}}',
'{{name}} must be a string' => '{{name}} deve ser uma string',
'{{name}} must not be a string' => '{{name}} não deve ser uma string',
'{{name}} must be iterable' => '{{name}} deve ser iterável',
'{{name}} must not iterable' => '{{name}} não deve ser iterável',
'{{name}} must be a base64 encoded string' => '{{name}} deve ser uma string codificada em base64',
'{{name}} must not be a base64 encoded string' => '{{name}} não deve ser uma string codificada em base64',
'{{name}} must be a valid PESEL' => '{{name}} deve ser um PESEL válido',
'{{name}} must not be a valid PESEL' => '{{name}} não deve ser um PESEL válido',
'{{name}} must be a positive number' => '{{name}} deve ser um número positivo',
'{{name}} must not be a positive number' => '{{name}} não deve ser um número positivo',
'{{name}} must be a valid PIS number' => '{{name}} deve ser um número de PIS válido',
'{{name}} must not be a valid PIS number' => '{{name}} não deve ser um número de PIS válido',
'{{name}} must be subset of {{superset}}' => '{{name}} deve ser um subconjunto de {{superset}}',
'{{name}} must not be subset of {{superset}}' => '{{name}} não deve ser um subconjunto de {{superset}}',
'{{name}} must be a valid image file' => '{{name}} deve ser um arquivo de imagem válido',
'{{name}} must not be a valid image file' => '{{name}} não deve ser um arquivo de imagem válido',
'{{name}} must not be greater than {{compareTo}}' => '{{name}} não deve ser maior que {{compareTo}}',
'The value must not be empty' => 'O valor não pode estar vazio',
'The value must be empty' => 'O valor deve estar vazio',
'{{name}} must not be empty' => '{{name}} não pode estar vazio',
'{{name}} must be empty' => '{{name}} deve estar vazio',
'{{name}} must be a symbolic link' => '{{name}} deve ser um link simbólico',
'{{name}} must not be a symbolic link' => '{{name}} não deve ser um link simbólico',
'{{name}} must have {{decimals}} decimals' => '{{name}} deve ter {{decimals}} casas decimais',
'{{name}} must not have {{decimals}} decimals' => '{{name}} não deve ter {{decimals}} casas decimais',
'The value must not be blank' => 'O valor não deve estar em branco',
'The value must be blank' => 'O valor deve estar em branco',
'{{name}} must not be blank' => '{{name}} não deve estar em branco',
'{{name}} must be blank' => '{{name}} deve estar em branco',
'{{name}} must be an executable file' => '{{name}} deve ser um arquivo executável',
'{{name}} must not be an executable file' => '{{name}} não deve ser um arquivo executável',
'{{name}} must be a boolean' => '{{name}} deve ser um booleano',
'{{name}} must not be a boolean' => '{{name}} não deve ser um booleano',
];
<?php
declare(strict_types=1);
use MaddHatter\MarkdownTable\Builder;
use Respect\Validation\Message\Template;
use GuzzleHttp\Client;
require __DIR__ . '/vendor/autoload.php';
function chatWithGPT(string $id, string $content): stdClass {
// $model = 'gpt-4o-mini';
$model = 'gpt-3.5-turbo';
$filename = __DIR__ . "/.cache.i/{$id}-pt_BR-{$model}.json";
if (file_exists($filename)) {
return (object) json_decode(file_get_contents($filename));
}
$apiKey = getenv('OPENAI_API_KEY');
$url = 'https://api.openai.com/v1/chat/completions';
$client = new Client();
// Add user message to conversation
$conversation = [
['role' => 'system', 'content' => <<<EOL
You will help me translate my validation error messages to Brazilian Portuguese (pt_BR).
You need to preserve the position of the placeholders.
You will simply output the translated version.
You will return in the same JSON format.
EOL],
];
$conversation[] = ['role' => 'user', 'content' => $content];
$response = $client->post($url, [
'headers' => [
'Authorization' => "Bearer $apiKey",
'Content-Type' => 'application/json',
],
'json' => [
'model' => $model, // Or 'gpt-4'
'messages' => $conversation,
'max_tokens' => 100,
'temperature' => 0.7,
],
]);
$body = json_decode($response->getBody()->__toString(), true);
$improved = $body['choices'][0]['message']['content'];
file_put_contents($filename, $improved);
return (object) json_decode($improved);
}
(static function (): void {
$translations = [];
foreach (new DirectoryIterator(__DIR__ . '/library/Rules') as $phpFile) {
if ($phpFile->isDot() || $phpFile->isDir() || $phpFile->getExtension() !== 'php') {
continue;
}
$shortName = $phpFile->getBasename('.php');
$class = new ReflectionClass('Respect\\Validation\\Rules\\' . $shortName);
echo $shortName . PHP_EOL;
$original = new stdClass();
$original->name = $shortName;
foreach ($class->getAttributes(Template::class) as $attribute) {
/** @var Template $template */
$template = $attribute->newInstance();
$original->{$template->id} = (object) [
'default' => $template->default,
'inverted' => $template->inverted,
];
}
$improved = chatWithGPT($shortName, json_encode($original));
foreach ($improved as $id => $message) {
if ($id === 'name') {
continue;
}
if (!$original->{$id}) {
continue;
}
$defaultOriginal = $original->{$id}->default;
$defaultTranslated = rtrim($improved->{$id}->default, '.');
$translations[$defaultOriginal] = $defaultTranslated;
$invertedOriginal = $original->{$id}->inverted;
$invertedTranslated = rtrim($improved->{$id}->inverted, '.');
$translations[$invertedOriginal] = $invertedTranslated;
}
}
file_put_contents(__DIR__ . '/pt_BR.php', '<?php'.PHP_EOL. 'return ' . var_export($translations, true) . ';' . PHP_EOL);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment