Sobes.tech
Middle

Como adicionar localização numa aplicação Flutter?

sobes.tech IA

Resposta da IA

  1. Adicionar dependências:

    No ficheiro pubspec.yaml, deve adicionar dependências para localização:

    dependencies:
      flutter:
        sdk: flutter
    
      flutter_localizations:
        sdk: flutter
      intl: ^0.18.0 # Exemplo de versão, pode variar
    

    Depois, execute flutter pub get.

  2. Criar ficheiros de localização:

    Crie diretórios para os recursos de localização, por exemplo ./lib/l10n/. Dentro, crie ficheiros .arb para cada idioma suportado. Por exemplo, para inglês e russo:

    app_en.arb:

    {
      "helloWorld": "Hello World!",
      "@@locale": "en"
    }
    

    app_ru.arb:

    {
      "helloWorld": "Привет мир!",
      "@@locale": "ru"
    }
    
  3. Configuração da geração de código:

    No ficheiro pubspec.yaml, indique o caminho para os ficheiros .arb e configure a geração:

    flutter:
      generate: true # Ativar geração
    
      assets:
        - assets/... # Os seus outros recursos
    
      l10n:
        arb-dir: lib/l10n # Diretório com ficheiros .arb
        template-arb-file: app_en.arb # Ficheiro .arb modelo
        output-localization-file: app_localizations.dart # Nome do ficheiro gerado
    

    Após guardar pubspec.yaml, o Flutter irá gerar automaticamente o ficheiro ./lib/generated/l10n.dart (ou o especificado em output-localization-file).

  4. Uso de cadeias localizadas:

    Na aplicação, onde precisar usar cadeias localizadas, importe o ficheiro gerado:

    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    

    Depois, aceda à cadeia localizada através de AppLocalizations.of(context)!:

    Text(AppLocalizations.of(context)!.helloWorld),
    
  5. Configuração do MaterialApp ou CupertinoApp:

    No widget de nível superior (geralmente MaterialApp ou CupertinoApp), deve indicar o suporte de línguas e os delegados de localização:

    import 'package:flutter_gen/gen_l10n/app_localizations.dart';
    
    MaterialApp(
      // ... outras configurações
      localizationsDelegates: const [
        AppLocalizations.delegate, // Delegado do ficheiro gerado
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
      ],
      supportedLocales: const [
        Locale('en', ''), // Inglês
        Locale('ru', ''), // Russo
        // ... outros idiomas suportados
      ],
      // ...
    );
    

Agora, a aplicação irá selecionar automaticamente a localização com base nas configurações do dispositivo do utilizador, se estiver presente em supportedLocales. Para alterar manualmente a localização, pode usar Locale e atualizar o estado da aplicação.