Flutter: localização de aplicativos usando o Android Studio


Muito já foi escrito sobre a localização (internacionalização) de aplicativos Flutter.
A documentação oficial trata dessa questão com alguns detalhes; além disso, vários entusiastas descrevem uma variedade de abordagens .


Este artigo não pretende ser exaustivo, mas é uma descrição de uma prática que, na minha opinião, reduz efetivamente a entrada manual.


Estamos falando de localização usando o flutter_i18n , um plug-in do Android Studio que pode ser usado para se livrar do trabalho de rotina e do código padrão.


Preparação


Instale o plug - in flutter-i18n primeiro


imagem


Após a reinicialização, os arquivos / i18n.dart e res / values ​​/ strings_en.arb gerados serão automaticamente adicionados à estrutura do projeto


imagem


( Adicionei manualmente o arquivo strings_ru.arb para o idioma russo)


Observe que o Android Studio 3.3.1 - 3.4 contém algum tipo de batente, por causa dos quais os arquivos de localização não são gerados. Descrevi esse problema no stackoverflow e obtive uma solução . Outra solução é permanecer temporariamente no AS 3.2, mas este é um amador.


Você também precisará instalar o pacote flutter_localizations para localizar os widgets internos do Flutter (isso será feito no nível do sistema).


dev_dependencies: flutter_localizations: sdk: flutter 

Depois disso, será suficiente adicionar parâmetros de localização ao construtor:


  return MaterialApp( localizationsDelegates: [ S.delegate, GlobalMaterialLocalizations.delegate, GlobalWidgetsLocalizations.delegate, DefaultCupertinoLocalizations.delegate, ], supportedLocales: S.delegate.supportedLocales, 

e não se esqueça de importar o pacote


 import 'package:f_latte/generated/i18n.dart'; 

Localização


Basta começar a adicionar as linhas necessárias, observando a notação JSON, assim:


strings_en.arb:


 { "title": "F-Latte", "greeting": "Hi, $name!", "pushingZero": "You pressed NONE (", "pushingOne": "You pressed once", "pushingTwo": "You pressed twice", "pushingOther": "You pressed $cnt times", } 

A propósito, o plugin implementa a lógica de trabalhar com plurais ( plurais ), para isso você deve nomear chaves em arquivos arb de uma certa maneira. Como isso funciona ficará claro para você a partir do código de exemplo.


Para adicionar idiomas, basta adicionar os arquivos necessários ao mesmo pacote e adicionar cadeias localizadas com as mesmas chaves, desta forma:


strings_ru.arb:


 { "title": "F-", "greeting": ", ${name}!", "pushingZero": "  ", "pushingOne": " ", "pushingTwo": " ", "pushingOther": " $cnt ()" } 

Com qualquer alteração nesses arquivos, o plug-in reconstruirá o arquivo i18n.dart . A propósito, eu recomendo pelo menos vê-lo, muito ficará mais claro.


Isso é tudo. Em qualquer lugar em que o acesso a cadeias localizadas seja necessário, basta chamar o método localizador estático:


 ///  title: Text(S.of(context).title), ... ///   Text(S.of(context).greeting('User'), ), ... ///    Text( S.of(context).pushing(_counter), style: Theme.of(context).textTheme.display1, , 

É assim que parece


O código com um exemplo está aqui (ramificação iter_0001_localiz ).




Fonte da ilustração.




PS
De acordo com awaik

a localização não funcionará no iOS. Para fazê-lo funcionar, você precisa adicionar idiomas à seção de informações no Xcode. Caso contrário, ele não determina nada e não produz erros.

aqui

Source: https://habr.com/ru/post/pt451556/


All Articles