Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Como o Spatie gerencia traduções quando o local do aplicativo mudar


Como o Spatie gerencia traduções quando o local do aplicativo mudar


A Spatie gerencia as traduções em aplicações de Laravel, integrando -se ao sistema de localização da Laravel e fornecendo maneiras flexíveis de armazenar e recuperar traduções com base no local atual do aplicativo.

como o Spatie lida com traduções quando o local do aplicativo muda

1. Armazenamento e recuperação de tradução

-A Spatie oferece um pacote chamado Laravel-Translation-Largoer, que permite armazenar traduções em um banco de dados em vez de apenas arquivos de idiomas. Este pacote substitui o provedor de serviços de tradução padrão do LaRavel pelo provedor da Spatie, permitindo que as traduções sejam buscadas dinamicamente do banco de dados [1].
- As traduções são armazenadas em uma tabela (geralmente `idioma_lines`), onde cada entrada contém um grupo (como" validação "), uma chave (como" necessária ") e um objeto JSON que mantém traduções para vários locais (por exemplo,` 'en' => 'este é um campo necessário', 'nl' => 'dit é een verplicht veld') [
- Quando você chama a função de `__ ()`) com uma chave de tradução, o carregador da Spatie busca a tradução para o local atual definido no aplicativo. Por exemplo, se a localidade do aplicativo for `'nl'`,` __ (' validation.Required ') `retorna a tradução holandesa do banco de dados [1].

2. Switching de localidade

- O local do aplicativo pode ser alterado em tempo de execução usando o método de App ()-> setLocale ('Locale_Code').
- Depois que o local é alterado, todas as recuperações de tradução subsequentes via `__ ()` ou outras funções de tradução retornam automaticamente o texto no local recém -definido.
- Se estiver faltando uma tradução para o local atual no banco de dados, o mecanismo de localidade de fallback de Laravel pode retornar a tradução do local padrão, a menos que seja explicitamente desativado [1] [8].

3. Traduções no nível do modelo com armazenamento JSON

- Outro pacote Spatie, Laravel Translatable, foi projetado para modelos eloquentes para tornar os atributos traduzíveis.
- As traduções são armazenadas como JSON em uma única coluna de banco de dados por atributo traduzível, sem precisar de tabelas extras [3].
- Quando o local do aplicativo muda, o acesso a um atributo traduzível no modelo retorna o valor para o local atual automaticamente. Por exemplo, `$ newsItem-> nome 'retornará a tradução para o local atual definido no aplicativo [4].
- Você pode obter ou definir explicitamente traduções para locais específicos usando métodos como `getTranslation (atributo, loce)` e `settranslation (atributo, loce, value)` [4].

4. Fallback e traduções ausentes

- O pacote traduzível da Spatie suporta locais de fallback, portanto, se houver uma tradução para o local atual, ele pode retornar a tradução de outro local (geralmente o padrão) [8].
- Esse comportamento pode ser controlado passando uma bandeira booleana para `gettranslation` para desativar o fallback e obter uma sequência vazia se a tradução estiver ausente [8].

Resumo

Quando o local do aplicativo muda, os pacotes de tradução da Spatie servem automaticamente a tradução apropriada de linhas de idiomas armazenadas no banco de dados ou atributos de modelo armazenados em JSON, alavancando a configuração do Locale da Laravel. Essa integração perfeita garante que as funções de recuperação de tradução retornem a sequência localizada correta com base no local de aplicativo atual, com mecanismos de fallback disponíveis se falta uma tradução.

Essa abordagem permite a comutação dinâmica de localidade em tempo de execução e suporta traduções de armazenamento de maneiras flexíveis, em tabelas de banco de dados ou colunas JSON, dependendo do pacote usado.

Referências: [1] [3] [4] [8]

Citações:
[1] https://github.com/spatie/laravel-translation-loader
[2] https://spatie.be/docs/laravel-translatable/v6/introduction
[3] https://github.com/spatie/laravel-translatable
[4] https://spatie.be/docs/laravel-translatable/v6/basic-usage/getting-and-settings-translations
[5] https://filamentphp.com/plugins/Filamespatie-translatable
[6] https://github.com/filamentphp/filament/discussions/6913
[7] https://laraveldaily.com/lesson/multi-language-laravel/spatie-laravel-translation-loader
[8] https://stackoverflow.com/questions/65252615/spatie-laravel-translatable-shows-the-default--locale-when-i-try-to-rterie-th