right now Im working in App using Flutter and I have 4 different languages, I use json (arb files) for localization (translation)
I need to pass different string values which app fetch them using API's as shown in example below
AppLocalizations.of(context)!snapshot.data![index].state_pickup[0]
however "AppLocalizations.of(context)!" doesn't fetch the return data from snapshot.data![index].state_pickup[0] and instead it looks for it as string and tries to search for match string name in AppLocalization.dart class?
Any idea how I can pass dynamic string arguments to AppLocalizations.of(context)!?
What you are trying to do, invoking a method by its name at runtime, is called reflection, and this is not supported by Flutter natively (though there are packages that try to emulate this, but I have no experience with them).
What will work for you, even though it might be tedious, is manually mapping your value from the API to the corresponding method from AppLocalizations.of(context).
String localizedString = getLocalizedString(snapshot.data![index].state_pickup[0], context);
String getLocalizedString(String key, BuildContext context) {
switch (key) {
case "possible_api_value_1":
return AppLocalizations.of(context)!.possibleApiValue1;
case "possible_api_value_2":
return AppLocalizations.of(context)!.possibleApiValue2;
...
}
An alternative is to use (abuse?) the ICU Select option.
This is the equivalent of a switch case statement in the translation file itself, rather than coding it as described by @pdurasie.
As described in the Localizely documentation (here and here)
Select statements take the form that matches passed variable or defaults to other form, which is required.
{
"selectExample": "Today is {gender, select, male {his} female {her} other {their} } birthday"
"@selectExample": {
"placeholders": {
"gender": {}
}
}
}
If we pass gender variable with the value male to the example, it will print "Today is his birthday".
The Flutter code for the poster would look like:
AppLocalizations.of(context).selectExample(snapshot.data![index].state_pickup[0])
It's unclear if there are any limits on the number of select options. (ICU ref docs)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With