localization 1.1.0
localization: ^1.1.0 copied to clipboard
Package to simplify the package translation.
Localization #
Package para simplificar tradução no app.
import 'package:localization/localization.dart';
Configuração - Sem sistema de rotas [exemplo] #
A configuração do package sem sistema de rotas é bem simples, basta colocar após o MaterialApp o seguinte código:
return MaterialApp(
...,
home: LocalizationWidget(child: MyHomePage()),
);
Dessa forma, será carregado o arquivo de tradução no início da aplicação e seu conteúdo ficará em memória.
Configuração - Com sistema de rotas [exemplo] #
Quando a aplicação está utilizando o sistema de rotas do flutter, não é utilizada a propriedade home
do MaterialApp
.
Para resolver esse problema, utilize o método assíncrono estático Localization.configuration()
.
NOTA : Esse método deve ser chamado antes de todas as chamadas de tradução. Geralmente, é executado na SplashScreen.
Adicionando pastas de tradução (padrão 'assets/lang'
) #
Para configurar uma lista de pastas de tradução, basta utilizar o método:
Localization.setTranslationDirectories([
'assets/lang',
'packages/package_example/assets/lang',
]);
Para adicionar uma pasta de tradução sem limpar as pastas de tradução incluídas anteriormente, basta chamar o método
Localization.includeTranslationDirectory('assets/lang');
NOTA : Para as alterações de pasta surtirem efeito, deve chamar a seguir o método Localization.configuration()
Consumindo a tradução #
Para facilitar o consumo da tradução, criamos uma extension de simples utilização:
"sua-key".i18n();
Caso prefira, pode utilizar a tradução sem as extensions:
Localization.translate("sua-key");
Definindo um idioma manualmente #
Por padrão, o idioma é selecionado pela configuração window.locale
do package dart:ui
.
Para forçar um determinado idioma, basta utilizar o parâmetro selectedLanguage
, dessa forma:
Localization.configuration(selectedLanguage: 'pt_BR');
Se os arquivos de tradução não forem encontrados, será carregado o arquivo de traduções informado em defaultLanguage
(padrão pt_BR.json
).
Para saber qual o idioma que o dispositivo está chamando, basta importar o dart:ui
dar um print de window.locale
, dessa forma:
main.dart
import 'dart:ui';
void main(){
debugPrint(window.locale.toString());
runApp(MyApp());
}
Parâmetros #
Para enviar parâmetros para a tradução, utilize a chave %s
, conforme o exemplo:
No arquivo de tradução: #
{
"birthday":"O aniversário de %s é no dia %s"
}
No arquivo dart: #
"birthday".i18n(args: ["David Araujo", "07/03"]);
Condições #
Para enviar condições para a tradução, utilize a chave %b{valor_verdadeiro:valor_falso}
, conforme o exemplo:
No arquivo de tradução: #
{
"resultado_encontrado": "%s %b{Resultados:Resultado} %b{encontrados:encontrado}"
}
No arquivo dart: #
'resultado_encontrado'.i18n(args: [3], conditions: true, true])
Repetição de chaves #
Quando houver repetição nas chaves, será enviada uma mensagem no log informando a chave que está duplicada:
flutter: [Localization System] Duplicated Key: "password-label" Path: "packages/package_example/assets/lang"
flutter: [Localization System] Carregadas keys do path packages/package_example/assets/lang
Automação #
Criamos uma automação que gera as chaves e suas traduções no Slidy CLI, basta utilizar o comando slidy localization