
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

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

( 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:
É 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