aura_i18n 1.0.0
aura_i18n: ^1.0.0 copied to clipboard
This package handles the internationalization for Aura applications.
Aura I18n #
This package handles the internationalization for Aura applications using the slang library.
Translation Guidelines #
To ensure consistency and maintainability across all supported languages, please follow these guidelines when contributing:
- File Format: All translation source files must be in JSON format.
- Directory: Store all translation files in the
lib/src/i18n/directory. - Naming Convention: Use standard ISO 639-1 language codes for filenames (e.g.,
en.json,fr.json). - Base Locale: English (
en.json) is the source of truth. New keys should always be defined here first. - Key Consistency: Ensure that all keys present in the base locale are also implemented in the other language files to avoid fallback issues.
- String Interpolation: Use the "braces" syntax for dynamic values (e.g.,
{name}). - Structure: Organize translations using nested JSON objects to group related strings by feature or screen.
- Advanced Features: Use
slangspecific syntax for plurals, genders, or linked translations where appropriate.
Code Generation #
This package uses code generation to provide type-safe translations. Whenever you modify the JSON files in lib/src/i18n/, you must regenerate the Dart classes by running:
dart run slang
Usage Example #
1. Initialization #
Initialize the localization at the start of your application:
import 'package:aura_i18n/aura_i18n.dart';
import 'package:flutter/material.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
// Detect and use the device locale
LocaleSettings.useDeviceLocale();
runApp(const MyApp());
}
2. Accessing Localized Strings #
You can access your translations using the generated t singleton:
import 'package:aura_i18n/aura_i18n.dart';
import 'package:flutter/material.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: [
// Simple string access
Text(t.auth.header.welcome), // Displays "Welcome"
// String with parameters
Text(
t.profile.info.error.fieldRequired(field: t.common.fields.email), // Displays "Email is required."
),
],
);
}
}