adding i18n for dynamic page
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import '../providers/locale_provider.dart';
|
||||
|
||||
/// Lightweight runtime reader for builder-generated dynamic strings (Group-2).
|
||||
/// Generated Hybrid screens call: `DynamicStrings.of(context).tr('phone_number')`
|
||||
/// No heavy package, no ML model, no network: pure JSON maps (KBs) + Provider.
|
||||
/// Fallback chain: current lang -> English -> pretty key. Never crashes.
|
||||
///
|
||||
/// Bootstrap loads embedded assets once (see main.dart):
|
||||
/// assets/translations_dynamic/en.json, hi.json
|
||||
/// Later, portal-backend diffs merge via LocaleProvider.updateFromServer().
|
||||
class DynamicStrings {
|
||||
final LocaleProvider _provider;
|
||||
DynamicStrings._(this._provider);
|
||||
|
||||
/// Listens to locale changes so Text rebuilds on language switch.
|
||||
static DynamicStrings of(BuildContext context) {
|
||||
return DynamicStrings._(Provider.of<LocaleProvider>(context));
|
||||
}
|
||||
|
||||
String tr(String key) => _provider.trDynamic(key);
|
||||
|
||||
/// Preload embedded asset tables. Call once before runApp finishes splash.
|
||||
static Future<Map<String, Map<String, String>>> loadEmbedded() async {
|
||||
final out = <String, Map<String, String>>{};
|
||||
for (final lang in LocaleProvider.supportedCodes) {
|
||||
try {
|
||||
final raw = await rootBundle.loadString('assets/translations_dynamic/$lang.json');
|
||||
final decoded = jsonDecode(raw) as Map<String, dynamic>;
|
||||
out[lang] = decoded.map((k, v) => MapEntry(
|
||||
k.toString().trim().toLowerCase().replaceAll(RegExp(r'\s+'), '_'),
|
||||
v.toString(),
|
||||
));
|
||||
} catch (_) {
|
||||
out[lang] = {};
|
||||
}
|
||||
}
|
||||
return out;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user