Last active
December 6, 2024 15:14
-
-
Save henriquemoody/05f1d08a7812a54c4aa2569bbe3ea99c to your computer and use it in GitHub Desktop.
Translate Respect\Validation messages with OpenAI
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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', | |
]; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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