Mirza Translator oferece a capacidade de traduzir e manipular texto facilmente usando a API Yandex.Translate.
Vamos configurar isso bem rápido em apenas três etapas!
Navegue até a pasta de instalação do Laravel através do terminal/cmd e execute composer require yak0d3/ Mirza_Yandex_Translator
ou adicione "yak0d3/ Mirza_Yandex_Translator ": "^1.0.0"
manualmente ao seu composer.json
.
Publique o arquivo de configuração usando um dos seguintes métodos:
php artisan vendor:publish --provider="yak0d3 Mirza_Yandex_Translator TMirzaServiceProvider"
php artisan vendor:publish
e digite o número atrás de yak0d3 Mirza_Yandex_Translator TMirzaServiceProvider
e pressione Enter
Adicione uma variável de ambiente ao seu arquivo .env
com o nome YANDEX_API
e defina seu valor para sua própria chave de API Yandex.Translate. ( por exemplo, YANDEX_API=MY_YANDEX_API_KEY
)
Observação : você pode obter sua chave de API GRATUITA no painel de desenvolvedores do Yandex.Translate
O guia de uso rápido serve apenas para explicar o uso básico deste pacote, para a lista de métodos e suas informações relativas (Parâmetros, Tipo de Retorno etc..) vá para a seção de métodos ou vá para as seções de diretivas para ver a lista de diretivas blade
disponíveis.
Mirza::detectLanguage('Welcome');
en
: en Mirza::translate('Hello','es');
"Hola"
Mirza::translateTo('Hello World!',['es', 'tr', 'fr']')
{
" originalText ": " Hello World! " ,
"originalLanguage": "en",
"text": {
"es": " Hola Mundo! " ,
"tr": " Merhaba D u00fcnya ! " ,
"fr": " Bonjour Tout Le Monde!"
}
}
Nota: Você pode decodificar esta string usando a função
json_decode
.
$textArray = ['Hello','My Dear','Friend'];
Mirza::translateArray($textArray,'fr');
[
{
" originalText ": "Hello",
"translatedText": "Bonjour"
},
{
"originalText": "My dear",
"translatedText": "Mon cher"
},
{
"originalText": "Friend",
"translatedText": " Ami"
}
]
Nota: Você pode decodificar esta string usando a função
json_decode
.
Ainda não entendeu? Dê uma olhada na documentação abaixo e a confusão desaparecerá!
Vamos administrá-lo, nem todos aqui acharão fácil começar a usar este pacote, então vamos tentar entender o que está acontecendo juntos. Esta seção cobrirá o uso de cada método fornecido pelo Mirza Yandex Translator . Aqui está o índice:
translate
translateArray
translateTo
detectLanguage
getSupportedLanguages
translateToAll
@translate
diretiva@yandex_rights
@languages_select
translate
Exemplo:
$ es_translation = Mirza::translate( ' Hello World! ' , 'es); //The first param is the text, the second one is the ISO code of the language
echo $es_translation; //This will output "Hola Mundo!"
translateArray
Observe que todas as strings
json
precisam ser decodificadas usando a função PHPjson_decode
. Dica: Para retornar um array PHP defina o segundo argumento dejson_decode
comotrue
( por exemplo,json_decode($jsonString, true);
).
Se você preferir manipularjson objects
, deixe o segundo argumento vazio ou defina-o comofalse
.
Mirza::translateArray(['Hello', 'My Dear', 'Friend'],'fr');
este método traduz um determinado array de texto para o qual é no nosso caso este array ['Hello', 'My Dear', 'Friend']
e o traduz para um determinado idioma que é o francês em nosso exemplo.
Esta função retorna uma string json encoded
como a seguinte:
[
{
" originalText ": "Hello",
"translatedText": "Bonjour"
},
{
"originalText": "My dear",
"translatedText": "Mon cher"
},
{
"originalText": "Friend",
"translatedText": " Ami"
}
]
Como você pode ver, a json string
de saída está na mesma ordem do array de entrada, agora podemos acessar cada um desses elementos decodificando a string da seguinte forma:
$ jsonString = Mirza:: translateArray ([ ' Hello ' , ' My Dear ' , ' Friend ' ], ' fr ' ); //The json string
$ translationsArray = json_decode ( $ jsonString , true ); //Our PHP Array
$ first_translation = $ translationsArray [ 0 ][ ' translatedText ' ];
$ second_translation = $ translationsArray [ 1 ][ ' translatedText ' ];
$ third_translation = $ translationsArray [ 2 ][ ' translatedText ' ];
Fácil, certo? Mas poderia ficar mais fácil se você definir o parâmetro $assoc como true para poder acessar suas traduções de strings por seus nomes de índice (que você definiu manualmente). Ninguém está ficando confuso aqui, aqui está um exemplo:
$ textArray = [
' header ' => " Welcome to the Mirza Documentation Page " ,
' body ' => " The body is too long to be put in this item " ,
' footer ' => " Thank you for reading this! "
]; //Our associative text array
$ jsonString = Marzi:: translate ( $ textArray , ' es ' , true ); //Notice that i have set $assoc (third param) to `true`
$ translationsArray = json_decode ( $ jsonString , true );
//Now you can access the translations by their old index names
$ header = $ translationsArray [ ' header ' ][ ' translatedText ' ];
$ body = $ translationsArray [ ' body ' ][ ' translatedText ' ];
$ footer = $ translationsArray [ ' footer ' ][ ' translatedText ' ];
Nota: Se você definir
$assoc
comotrue
e fornecer um array sequencial, uma exceção será lançada.
translateTo
: Este método é (talvez) a versão reversa da função anterior, em vez de pegar um array
de strings, este método pega uma string
e a traduz para um array de idiomas. Exemplo:
$ jsonString = Mirza:: translateTo ( ' My awesome text ' , [ ' ar ' , ' tr ' , ' de ' ]);
O exemplo acima retornará json string
com a seguinte estrutura:
[
{
" originalText ":"My awesome text",
"originalLanguage": "en",
"text":{
" ar":" u0628 u0644 u062f u064a u0627 u0644 u0646 u0635 u0631 u0647 u064a u0628 u0629 " ,
" tr":" M u00fcthi u015f metin",
" de " :"Meine wunderbare text"
}
}
]
Você deve ter notado que alguns dos caracteres estão no formato Unicode, não se preocupe se você
echo
mais tarde, ele será exibido corretamente.
Agora podemos decodificar facilmente essa json string
e acessar nossos dados assim:
$ translations = json_decode ( $ jsonString , true ); //Our PHP array
$ originalText = $ translations [ ' originalText ' ];
$ originalLanguage = $ translations [ ' originalLanguage ' ];
$ ar_translation = $ translations [ ' text ' ][ ' ar ' ];
$ tk_translation = $ translations [ ' text ' ][ ' tr ' ];
$ de_translation = $ translations [ ' text ' ][ ' de ' ];
detectLanguage
Às vezes você precisa detectar em qual idioma um texto está escrito, o método detectLanguage
é feito justamente para esse assunto! Conforme mencionado na tabela de métodos, este método utiliza um parâmetro obrigatório e um opcional. O parâmetro opcional ( boolean $name
) nos permite alternar entre retornar o código ISO do idioma ou o nome do idioma.
Exemplo:
//Leave the $name param empty or set it to `false`
//To return the language ISO code
$ lang = Mirza:: detectLanguage ( ' Hello World! ' );
echo $ lang ; //Outputs "en"
//Setthe $name param to `true`
//To return the language ISO code
$ lang = Mirza:: detectLanguage ( ' Hello World! ' , true );
echo $ lang ; //Outputs "English"
getSupportedLanguages
Este método não aceita parâmetros (deveria, mas serão adicionados em uma versão posterior) e se executado retorna a lista de todos os idiomas suportados.
Exemplo:
//Save the json encoded string to the `$supportedLanguages` variable
$ supportedLanguages = Mirza:: getSupportedLanguages ();
echo $ supportedLanguages ;
/* Outputs the json string in the following format:
[
{ 'lang_code' => 'lang_name' },
{ 'lang_code' => 'lang_name' },
]
*/
Não quis incluir o resultado completo porque é muito longo, mas se você ainda estiver curioso, estava preparado para isso! Aqui está uma captura de tela:
Vamos decodificar essa json string
e brincar um pouco!
//Decode json string and wrap it into a PHP array
$ langsArray = json_decode ( $ supportedLanguages , true );
Digamos que temos um código de idioma, mas não sabemos a que idioma ele se refere, esta linha nos ajudaria muito nesse caso:
echo $ langsArray [ ' tr ' ]; //Outputs "Turkish"
Agora, supondo que temos um nome de idioma, mas não sabemos o código ISO, EASY PEASY! Podemos fazer isso com a função PHP array_flip
$ flippedArray = array_flip ( $ langsArray );
/* The values are now keys! Cool right? */
$ languageCode = $ flippedArray [ ' Sinhalese ' ];
echo $ languageCode ; //Outputs "si"
translateToAll
Exemplo:
//Save the json string to a variable
$ myStringInAllLanguages = Mirza:: translateToAll ( ' My string ' );
echo $ myStringInAllLanguages ;
/*Outputs a similar string to the `translateTo` method but
with all supported languages*/
@translate
: permite traduzir um determinado texto para um determinado idioma em qualquer lugar
Exemplo:
@translate('Welcome', 'fr') <!-- Outputs "Bienvenue" -->
@yandex_rights
: Se você leu os requisitos do Yandex.Translate para o uso de resultados de tradução, sabe que esta diretiva será muito útil.
Você deve especificar a color
como o primeiro argumento e o font-size
como o segundo.
Exemplo:
@yandex_rights('black', '16px');
<!-- Output -->
< a href =' https://translate.yandex.com/ ' target =' _blank ' style =' font-size:16px;color:black; ' > Powered by Yandex.Translate </ a >
@languages_select
: Gera um HTML <select>
com a lista de todos os idiomas suportados.Exemplo:
@languages_select
<!-- Output -->
< select >
< option value =" lang_code " > Lang_Name </ option >
< option value =" lang_code " > Lang_Name </ option >
< option value =" lang_code " > Lang_Name </ option >
</ select >
Tudo no Mirza foi feito para ser fácil e legível, bastando dar uma olhada no código-fonte você entenderá o que está acontecendo rapidamente. Mas não se preocupe, eu poupei você da luta e fiz uma tabela contendo a lista de métodos que o Mirza Translator oferece.
Método | Parâmetros | Devoluções | Lança | Descrição |
---|---|---|---|---|
traduzir | string $text string $lang Opcional: string $format [html|plain] (Default: "Plain") | Corda | Exceção: se o texto não puder ser traduzido. | Traduz um determinado $text para um determinado $lang (idioma) |
traduzir para | string $text array $langs | Cadeia de caracteres (json) | Exceção: se um ou mais idiomas não forem suportados. | Traduzir um determinado $text para vários $langs (idiomas) |
traduzirArray | array $textArray string $lang Opcional: bool $assoc (Default: false) | Cadeia de caracteres (json) | Exceção: 1. Se o idioma de destino não for compatível. 2. Se $assoc estiver definido como true e o array fornecido não for associativo. | Traduz um $textArray (matriz de texto) para um determinado $lang (idioma)Nota: Se $assoc estiver definido como true , a string json retornada terá os mesmos nomes de índice |
detectarIdioma | string $text Opcional: bool $langName | Corda | Exceção: 1. Se o código do idioma não for encontrado. 2. Se o nome do idioma não for encontrado | Detecta o idioma de um determinado $text e retorna o código do idiomaNota: Se $langName estiver definido como true , o nome completo do idioma será retornado. |
getSupportedLanguages | Nenhum | Cadeia de caracteres (json) | Exceção: se ocorrer um erro desconhecido ao tentar buscar a lista de funções suportadas | Retorna uma string json contendo a lista de todos os idiomas suportados |
traduzirToAll | string $text | Cadeia de caracteres (json) | Nenhum | Traduz uma string ( $text ) para todos os idiomas suportados.Nota: Isso pode demorar um pouco e causar uma PHP max_execution_time TIMEOUT Exception |
direitos_yandex | Opcional: string $color (Default: #fff) string $fontsize (Default: 14px) | Corda | Nenhum | Retorna a string do link "Powered By Yandex.Translate". Também chamado via diretiva blade @yandex_rights .Observação: consulte Yandex Translate: Requisitos para o uso de resultados de tradução para saber mais sobre tamanho da fonte, cor e requisitos de posicionamento. |
idiomas_selecionar | Nenhum | Corda | Nenhum | Retorna a string de uma tag HTML <select> com a lista de todos os idiomas disponíveis.Também chamado pela diretiva blade @languages_select |
Diretiva | Parâmetros | Descrição |
---|---|---|
@yandex_rights | Opcional: string $color (Default: #fff) string $fontsize (Default: 14px) | Gera um link HTML para o texto "Powered By Yandex.Translate". |
@languages_select | Nenhum | Gera uma tag HTML <select> com a lista de todos os idiomas disponíveis. |
@translate | string $text string $lang | Traduzir uma determinada string $text para um determinado $lang (idioma) |
O Mirza foi testado por apenas uma pessoa (obviamente eu?), o que significa que podem ocorrer problemas com outras pessoas. Se algo deu errado com a instalação do Mirza ou você acha que algo ainda está faltando, avise-me enviando um novo problema.