Skip to content

Add Internationalization (i18n) Support #19

@pbalduino

Description

@pbalduino

Description

Add comprehensive internationalization support to make the app accessible for users worldwide, starting with English and Brazilian Portuguese.

Current Behavior

  • All app strings are hardcoded in English
  • No localization support
  • No language selection in settings
  • Interface language depends on code, not user preference

Requested Features

Core i18n Implementation

  • Flutter intl package integration
  • ARB (Application Resource Bundle) files for translations
  • Automatic locale detection from device settings
  • Fallback to English when locale not supported
  • Support for right-to-left languages (future-ready)

Language Support

  • English (en) - Default/fallback language
  • Brazilian Portuguese (pt-BR) - Primary additional language
  • Extensible architecture for future languages

Settings Integration

  • Language selection option in settings screen
  • Ability to override device language
  • Immediate language switching without app restart
  • Language preference persistence

Strings to Localize

  • Screen Titles: "Guitar Tuner", "Settings", "Tunings"
  • Tuning Names: "Standard Guitar", "Drop D", etc.
  • Status Messages: "Listening...", "Perfectly In Tune", etc.
  • Button Labels: String notes, navigation buttons
  • Settings Labels: All setting options and descriptions
  • Error Messages: Permission errors, audio issues
  • Accessibility: All tooltip and screen reader text

Technical Implementation

Dependencies

dependencies:
  flutter_localizations:
    sdk: flutter
  intl: ^0.18.0
dev_dependencies:
  intl_utils: ^2.8.0

File Structure

lib/
├── l10n/
│   ├── app_en.arb          # English strings
│   ├── app_pt.arb          # Portuguese strings
│   └── l10n.dart           # Generated localizations
├── generated/
│   └── intl/               # Generated files
└── main.dart               # Locale configuration

Priority

🟡 Medium - Enhances accessibility for global users

Acceptance Criteria

  • Flutter intl package is properly configured
  • English (en) and Portuguese (pt-BR) translations are complete
  • Device language is automatically detected
  • Language can be changed in settings screen
  • Language changes take effect immediately
  • Fallback to English works for unsupported locales
  • All user-facing strings are localized
  • Musical terms are appropriately translated
  • RTL support is architecturally ready
  • Language preference persists between app restarts

Files Affected

  • pubspec.yaml (dependencies)
  • lib/main.dart (locale configuration)
  • lib/l10n/ (new directory for translations)
  • lib/screens/settings_screen.dart (language selector)
  • lib/screens/tuner_screen.dart (localized strings)
  • lib/screens/tunings_screen.dart (localized strings)
  • lib/data/tunings.dart (localized tuning names)

Translation Considerations

Musical Terms

  • Note names (C, D, E, F, G, A, B) remain in English internationally
  • Tuning descriptions may need cultural adaptation
  • "Flat" (♭) and "Sharp" (♯) symbols are universal

Cultural Adaptation

  • Brazilian Portuguese: formal vs informal tone
  • Date/time formats (not applicable to tuner)
  • Number formats for frequency display

Future Extensibility

  • Spanish (es) for Latin America
  • French (fr) for France/Canada
  • German (de) for Europe
  • Japanese (ja) for Asia
  • Support for region-specific variants (pt-PT vs pt-BR)

Task ID: I18N-001

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestfeatureNew featuresi18nInternationalization and localizationlocalizationLocalization features

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions