l10n_flow 0.1.0
l10n_flow: ^0.1.0 copied to clipboard
Sync translations from collaborative spreadsheets and manage JSON localization at runtime in Flutter.
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:l10n_flow/l10n_flow.dart';
const english = AppLocale(
value: Locale('en'),
assetPath: 'assets/l10n/en.json',
);
const simplifiedChinese = AppLocale(
value: Locale('zh', 'CN'),
assetPath: 'assets/l10n/zh_cn.json',
);
const vietnamese = AppLocale(
value: Locale('vi'),
assetPath: 'assets/l10n/vi.json',
);
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await L10nManager().init(
defaultLocale: english,
locales: const [english, simplifiedChinese, vietnamese],
);
runApp(const ExampleApp());
}
class ExampleApp extends StatelessWidget {
const ExampleApp({super.key});
@override
Widget build(BuildContext context) {
return L10nBuilder(
builder: (context, l10n) => MaterialApp(
locale: l10n.locale.value,
supportedLocales: L10nManager().supportedLocales,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
home: Scaffold(
appBar: AppBar(title: Text(l10n.t('app.title') ?? '')),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('welcome'.trMap({'name': 'Aiwen'})),
const SizedBox(height: 16),
SegmentedButton<AppLocale>(
segments: const [
ButtonSegment(value: english, label: Text('English')),
ButtonSegment(
value: simplifiedChinese,
label: Text('中文'),
),
ButtonSegment(value: vietnamese, label: Text('Tiếng Việt')),
],
selected: {l10n.locale},
onSelectionChanged: (selection) async {
await L10nManager().change(selection.single);
},
),
],
),
),
),
),
);
}
}