GOOGLE ADS

sábado, 30 de abril de 2022

Archivo xml de cadena en Flutter

En flutter string, el texto se establece directamente en el TextFieldwidget como:

new Text('Hello, How are you?')

¿Es la forma correcta? o podemos mantener todas las cadenas en un archivo y usarlo como:

<string name="name_hint">Hello, How are you?</string>

Es posible?


Solución del problema

Captura de pantalla:

Complementaré la respuesta de Mantas.

Código completo (seguro nulo):

Para aquellos de ustedes que no quieren usar ningún complemento de terceros, así es como pueden hacerlo.

  • Crea una carpeta stringsen assets. Ponga su archivo de idioma en él.

    assets
    strings
    - en.json // for english
    - ru.json // for russian


  • Ahora en en.json, escribe tu cadena, por ejemplo.

    {
    "text1": "Hello",
    "text2": "World"
    }

    Del mismo modo, en ru.json,

    {
    "text1": "Привет",
    "text2": "Мир"
    }


  • Añadir esto al pubspec.yamlarchivo (cuidado con los espacios)

    flutter:
    uses-material-design: true
    assets:
    - assets/strings/en.json
    - assets/strings/ru.json
    flutter_localizations:
    sdk: flutter


  • Ahora ya está todo listo para usar estas cadenas en su aplicación. Aquí está el código de muestra, AppBarmuestra el texto traducido.

     void main() {
    runApp(
    MaterialApp(
    locale: Locale("ru"), // switch between en and ru to see effect
    localizationsDelegates: [const DemoLocalizationsDelegate()],
    supportedLocales: [const Locale('en', ''), const Locale('ru', '')],
    home: HomePage(),
    ),
    );
    }
    class HomePage extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
    return Scaffold(
    appBar: AppBar(title: Text(DemoLocalizations.of(context).getText("text2")?? "Error")),
    );
    }
    }
    // this class is used for localizations
    class DemoLocalizations {
    static DemoLocalizations? of(BuildContext context) {
    return Localizations.of<DemoLocalizations>(context, DemoLocalizations);
    }
    String getText(String key) => language[key];
    }
    late Map<String, dynamic> language;
    class DemoLocalizationsDelegate extends LocalizationsDelegate<DemoLocalizations> {
    const DemoLocalizationsDelegate();
    @override
    bool isSupported(Locale locale) => ['en', 'ru'].contains(locale.languageCode);
    @override
    Future<DemoLocalizations> load(Locale locale) async {
    String string = await rootBundle.loadString("assets/strings/${locale.languageCode}.json");
    language = json.decode(string);
    return SynchronousFuture<DemoLocalizations>(DemoLocalizations());
    }
    @override
    bool shouldReload(DemoLocalizationsDelegate old) => false;
    }

  • No hay comentarios.:

    Publicar un comentario

    Flutter: error de rango al acceder a la respuesta JSON

    Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...