{"id":5911,"date":"2026-04-13T12:56:44","date_gmt":"2026-04-13T15:56:44","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5911"},"modified":"2026-04-13T13:25:12","modified_gmt":"2026-04-13T16:25:12","slug":"internacionalizacao-com-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/","title":{"rendered":"Internacionaliza\u00e7\u00e3o com CakePHP"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">Internacionaliza\u00e7\u00e3o com CakePHP: O mercado de tecnologia n\u00e3o possui fronteiras. Hoje, voc\u00ea pode estar desenvolvendo um sistema em S\u00e3o Jos\u00e9 do Rio Preto, mas amanh\u00e3 seu principal cliente pode ser uma empresa em Portugal, nos Estados Unidos ou no Jap\u00e3o. Se o seu c\u00f3digo est\u00e1 repleto de frases fixas em portugu\u00eas (&#8220;hardcoded&#8221;), voc\u00ea ter\u00e1 um problema gigantesco para escalar.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este vig\u00e9simo segundo artigo da nossa s\u00e9rie para ensinar voc\u00ea a dominar a <strong>Internacionaliza\u00e7\u00e3o (i18n)<\/strong>. Vamos transformar sua aplica\u00e7\u00e3o em um sistema global, capaz de falar qualquer l\u00edngua com apenas algumas configura\u00e7\u00f5es, mantendo a eleg\u00e2ncia e a organiza\u00e7\u00e3o que o framework exige.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Internacionaliza\u00e7\u00e3o (i18n): Preparando seu app para v\u00e1rios idiomas no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Internacionaliza\u00e7\u00e3o com CakePHP: A <strong>Internacionaliza\u00e7\u00e3o<\/strong>, frequentemente abreviada como <strong>i18n<\/strong> (o n\u00famero 18 representa as letras entre o &#8216;i&#8217; e o &#8216;n&#8217;), \u00e9 o processo de projetar e preparar sua aplica\u00e7\u00e3o para suportar diversos idiomas e formatos regionais (como moedas e datas) sem a necessidade de altera\u00e7\u00f5es estruturais no c\u00f3digo-fonte.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No CakePHP, a i18n \u00e9 tratada como um cidad\u00e3o de primeira classe. O framework utiliza o padr\u00e3o da ind\u00fastria chamado <strong>gettext<\/strong>, que separa as mensagens de tradu\u00e7\u00e3o do c\u00f3digo l\u00f3gico, facilitando a vida tanto dos desenvolvedores quanto dos tradutores.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. O b\u00e1sico: A fun\u00e7\u00e3o de tradu\u00e7\u00e3o <code>__()<\/code><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A regra de ouro para um app internacionaliz\u00e1vel \u00e9: <strong>nunca escreva texto puro na sua View ou no seu Controller<\/strong>. Em vez de escrever <code>echo \"Bem-vindo\";<\/code>, voc\u00ea deve usar a fun\u00e7\u00e3o global de tradu\u00e7\u00e3o do CakePHP.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Como funciona:<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>\/\/ Na sua View ou Controller\necho __('Bem-vindo');\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A fun\u00e7\u00e3o <code>__()<\/code> faz duas coisas:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Verifica qual \u00e9 o idioma atual do sistema.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Procura em um arquivo de tradu\u00e7\u00e3o se existe um correspondente para a chave &#8220;Bem-vindo&#8221;. Se n\u00e3o encontrar, ela exibe o texto original.<\/li>\n<\/ol>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Existem varia\u00e7\u00f5es poderosas dessa fun\u00e7\u00e3o, como a <code>__n()<\/code>, usada para lidar com plurais:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>echo __n('{0} artigo encontrado', '{0} artigos encontrados', $total, $total);\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. Estrutura de Pastas e Arquivos .po<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP organiza as tradu\u00e7\u00f5es na pasta <code>resources\/locales\/<\/code>. Cada idioma possui sua pr\u00f3pria subpasta (usando o c\u00f3digo ISO, como <code>pt_BR<\/code>, <code>en_US<\/code>, <code>es_ES<\/code>). Dentro delas, vivem os arquivos <code>.po<\/code> (Portable Object).<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Exemplo de caminho:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><code>resources\/locales\/pt_BR\/default.po<\/code> (Portugu\u00eas Brasil)<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><code>resources\/locales\/en_US\/default.po<\/code> (Ingl\u00eas EUA)<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Anatomia de um arquivo .po:<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Snippet de c\u00f3digo<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>msgid \"Bem-vindo\"\nmsgstr \"Welcome\"\n\nmsgid \"{0} artigo encontrado\"\nmsgid_plural \"{0} artigos encontrados\"\nmsgstr&#91;0] \"{0} article found\"\nmsgstr&#91;1] \"{0} articles found\"\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. Extraindo as tradu\u00e7\u00f5es automaticamente (I18n Shell)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Voc\u00ea n\u00e3o precisa criar esses arquivos <code>.po<\/code> manualmente para cada palavra do seu sistema. O CakePHP possui uma ferramenta CLI (Command Line Interface) fant\u00e1stica que varre seu projeto em busca das fun\u00e7\u00f5es <code>__()<\/code> e gera os arquivos para voc\u00ea.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No seu terminal, execute:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake i18n extract\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O assistente perguntar\u00e1 onde voc\u00ea deseja salvar e quais pastas quer escanear. Ao final, ele gerar\u00e1 um arquivo <code>default.pot<\/code> (template). Basta renome\u00e1-lo para <code>default.po<\/code> dentro da pasta do idioma desejado e come\u00e7ar a traduzir.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. Mudando o idioma dinamicamente<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como o CakePHP sabe qual idioma exibir? Isso \u00e9 controlado pela classe <code>I18n<\/code>. Voc\u00ea pode definir o idioma globalmente no seu <code>AppController.php<\/code> ou criar um Middleware (Artigo 17) que detecta a prefer\u00eancia do usu\u00e1rio.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Detectando o idioma pela URL ou Sess\u00e3o:<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>use Cake\\I18n\\I18n;\n\npublic function beforeFilter(\\Cake\\Event\\EventInterface $event)\n{\n    parent::beforeFilter($event);\n    \n    \/\/ Supondo que voc\u00ea salve o idioma na sess\u00e3o ou venha pela URL\n    $lang = $this-&gt;request-&gt;getParam('lang', 'pt_BR');\n    I18n::setLocale($lang);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dica para SEO: URLs como <code>meusite.com\/en\/artigos<\/code> s\u00e3o muito melhores para o Google do que usar apenas sess\u00f5es. Use o roteamento avan\u00e7ado (Artigo 12) para gerenciar o prefixo do idioma.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. Localiza\u00e7\u00e3o (L10n): Datas, N\u00fameros e Moedas<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Internacionalizar n\u00e3o \u00e9 apenas traduzir palavras. \u00c9 garantir que o usu\u00e1rio em Londres veja a data como <code>DD\/MM\/YYYY<\/code> e o usu\u00e1rio em Nova York veja como <code>MM\/DD\/YYYY<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP utiliza a biblioteca <strong>ICU<\/strong> integrada para formatar esses dados automaticamente baseando-se no locale definido.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>use Cake\\I18n\\Number;\nuse Cake\\I18n\\FrozenTime;\n\n\/\/ Formata\u00e7\u00e3o de Moeda\necho Number::currency(1500.50); \/\/ R$ 1.500,50 (em pt_BR) ou $1,500.50 (em en_US)\n\n\/\/ Formata\u00e7\u00e3o de Data\n$data = FrozenTime::now();\necho $data-&gt;i18nFormat(\\IntlDateFormatter::LONG); \n\/\/ \"13 de abril de 2026\" (pt_BR) ou \"April 13, 2026\" (en_US)\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">6. Traduzindo conte\u00fado do Banco de Dados (Translate Behavior)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E quanto \u00e0s centenas de artigos em um blog? Eles n\u00e3o est\u00e3o nos arquivos <code>.po<\/code>, eles est\u00e3o no MySQL. Para traduzir campos de tabelas, o CakePHP oferece o <strong>Translate Behavior<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ele permite que voc\u00ea mantenha uma tabela centralizada de tradu\u00e7\u00f5es (<code>i18n<\/code>) e o framework faz o <em>join<\/em> automaticamente para buscar o t\u00edtulo e o corpo do artigo no idioma selecionado.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando o Behavior na Table:<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>\/\/ src\/Model\/Table\/ArtigosTable.php\npublic function initialize(array $config): void\n{\n    $this-&gt;addBehavior('Translate', &#91;'fields' =&gt; &#91;'titulo', 'corpo']]);\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ao salvar um artigo, voc\u00ea pode salvar v\u00e1rias tradu\u00e7\u00f5es ao mesmo tempo, e ao ler, o CakePHP traz a vers\u00e3o correta de forma transparente.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">7. Boas Pr\u00e1ticas para um App Global<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para ser um desenvolvedor s\u00eanior em CakePHP, siga estas diretrizes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Use chaves descritivas ou o texto original:<\/strong> H\u00e1 quem prefira usar chaves (<code>'home.welcome_message'<\/code>) e quem prefira o texto original (<code>'Bem-vindo ao nosso portal'<\/code>). O CakePHP funciona bem com ambos, mas o texto original facilita a leitura do c\u00f3digo.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>N\u00e3o concatene frases de tradu\u00e7\u00e3o:<\/strong>\n<ul class=\"wp-block-list\">\n<li><em>Errado:<\/em> <code>__('O erro foi') . $erro . __('tente novamente')<\/code><\/li>\n\n\n\n<li><em>Certo:<\/em> <code>__('O erro foi {0}, tente novamente', $erro)<\/code><\/li>\n\n\n\n<li>Isso \u00e9 vital porque a ordem das palavras muda drasticamente entre idiomas (como Alem\u00e3o e Japon\u00eas).<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Localize seus formul\u00e1rios:<\/strong> Use o <code>FormHelper<\/code> em conjunto com as tradu\u00e7\u00f5es para os labels de cada input.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Imagens com texto:<\/strong> Evite! Se precisar, use CSS para sobrepor o texto traduzido a uma imagem de fundo, ou use o idioma como parte do nome do arquivo (ex: <code>bandeira-en.png<\/code>).<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Conclus\u00e3o: O Mundo \u00e9 o seu Limite<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Preparar sua aplica\u00e7\u00e3o para v\u00e1rios idiomas com <strong>i18n no CakePHP<\/strong> n\u00e3o \u00e9 apenas uma tarefa t\u00e9cnica; \u00e9 uma decis\u00e3o estrat\u00e9gica de neg\u00f3cio. Ao modularizar suas strings e utilizar as ferramentas de localiza\u00e7\u00e3o do framework, voc\u00ea remove as barreiras geogr\u00e1ficas do seu software.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Seja para um blog, para um portal <strong>de empregos<\/strong> ou para um novo SaaS internacional, o CakePHP garante que a transi\u00e7\u00e3o entre idiomas seja suave para o usu\u00e1rio e organizada para voc\u00ea, desenvolvedor. Sua aplica\u00e7\u00e3o agora est\u00e1 pronta para ser cidad\u00e3 do mundo.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Com este dom\u00ednio sobre a internacionaliza\u00e7\u00e3o, voc\u00ea eleva a qualidade do seu portf\u00f3lio a um n\u00edvel global.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o CakePHP, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no CakePHP, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/html\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/css\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/javascript\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/sql\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/php\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica de Especialista:<\/strong> Se o seu projeto for muito grande, utilize ferramentas como o <strong>Poedit<\/strong> ou servi\u00e7os na nuvem para gerenciar seus arquivos <code>.po<\/code>. Eles permitem que tradutores profissionais trabalhem nos arquivos sem nunca precisarem tocar no seu c\u00f3digo-fonte!<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Internacionaliza\u00e7\u00e3o com CakePHP: O mercado de tecnologia n\u00e3o possui fronteiras. Hoje, voc\u00ea pode estar desenvolvendo&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5819,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-5911","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cakephp","wpcat-97-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o &#039;i&#039; e...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o &#039;i&#039; e...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-13T15:56:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-13T16:25:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Internacionaliza\u00e7\u00e3o com CakePHP\",\"datePublished\":\"2026-04-13T15:56:44+00:00\",\"dateModified\":\"2026-04-13T16:25:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/\"},\"wordCount\":1077,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"articleSection\":[\"CakePHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/\",\"name\":\"Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-13T15:56:44+00:00\",\"dateModified\":\"2026-04-13T16:25:12+00:00\",\"description\":\"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o 'i' e...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"width\":758,\"height\":426,\"caption\":\"CakePHP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/internacionalizacao-com-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Internacionaliza\u00e7\u00e3o com CakePHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI","description":"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o 'i' e...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI","og_description":"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o 'i' e...","og_url":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-13T15:56:44+00:00","article_modified_time":"2026-04-13T16:25:12+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","type":"image\/png"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Internacionaliza\u00e7\u00e3o com CakePHP","datePublished":"2026-04-13T15:56:44+00:00","dateModified":"2026-04-13T16:25:12+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/"},"wordCount":1077,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","articleSection":["CakePHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/","name":"Internacionaliza\u00e7\u00e3o com CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-13T15:56:44+00:00","dateModified":"2026-04-13T16:25:12+00:00","description":"Internacionaliza\u00e7\u00e3o com CakePHP: A Internacionaliza\u00e7\u00e3o, frequentemente abreviada como i18n (o n\u00famero 18 representa as letras entre o 'i' e...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","width":758,"height":426,"caption":"CakePHP"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/internacionalizacao-com-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Internacionaliza\u00e7\u00e3o com CakePHP"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5911"}],"version-history":[{"count":4,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5911\/revisions"}],"predecessor-version":[{"id":5922,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5911\/revisions\/5922"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/5819"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}