getString function
Implementation
String getString(
String tag, {
String? plural,
int length = 0,
Map<String, String>? params,
Map<String, dynamic>? dynamicContext,
}) {
// Check if the tag contains parameter composition syntax
final braceIndex = tag.indexOf('{');
if (braceIndex != -1) {
// Extract the main translation key and parameters
final translationKey = tag.substring(0, braceIndex);
final paramsContent = tag.substring(braceIndex + 1, tag.lastIndexOf('}'));
// Parse parameters
final composedParams = <String, String>{};
for (final pair in paramsContent.split(',')) {
final parts = pair.split(':');
if (parts.length != 2) continue;
final paramKey = parts[0].trim();
final paramValue = parts[1].trim();
// Check if it's a dynamic value directive (starts with __)
if (paramValue.startsWith('__')) {
final contextProperty = paramValue.substring(2); // Remove __
final contextValue = dynamicContext?[contextProperty];
composedParams[paramKey] = contextValue != null
? getString(contextValue.toString())
: '';
} else {
// Static translation key
composedParams[paramKey] = getString(paramValue);
}
}
// Merge with any explicitly provided params (explicit params take precedence)
final finalParams = {...composedParams, ...?params};
// Use the extracted translation key
if (plural != null) {
return translationKey.trPluralParams(plural, length, finalParams);
}
return translationKey.trParams(finalParams);
}
// Original logic for standard getString calls
if (plural != null) {
if (params != null) {
return tag.trPluralParams(plural, length, params);
}
return tag.trPlural(plural, length);
}
if (params != null) {
return tag.trParams(params);
}
return tag.tr;
}