Flutter получает языковые строки в виджете без изменения языкового стандарта контекста

#flutter

Вопрос:

Я смог реализовать поддержку нескольких языков в Flutter, используя документы разработчика (https://flutter.dev/docs/development/accessibility-and-localization/internationalization )

Мне было интересно, есть ли способ получить доступ к языковым строкам, которые мы определяем в виджете, но не изменяя языковой стандарт контекста.

Вот мой пример использования.

Я представляю набор книг в виде сетки карточек. Содержимое на разных языках (например, на английском и испанском). Теперь, в зависимости от языка, я хотел бы использовать некоторые текстовые строки из локали только для одной карты сетки.

Например, если данные каждой книги: language (en, es), title (…), no_pages (x). Затем, при представлении сетки, я хотел бы использовать слово «страницы» из строки либо как «Страницы», либо как «Страница».

Как это сделать? Спасибо

Ответ №1:

Взгляните на пакет language_builder в pub.dev, он очень прост в использовании. Обернув корневой виджет с помощью LanguageBuilder, вы можете настроить язык своего приложения. Попросите ваше приложение использовать язык телефонов или измените его вручную из приложения.

 void main() {
  runApp(
    MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Language Builder Example',
      home: LanguageBuilder(
        useDeviceLanguage: false,
        defaultLanguage: 'en',
        languagesMap: Languages.languages,
        child: MainPage(),
        //splash: Container(),
      ),
    ),
  );
}

class Languages {
  static Map<String, String> languages = {
    "tr": """{
        "main_page": {
            "title": "Ana Sayfa",
            "second_page": "İkinci Sayfa"
        },
        "second_page": {
            "title": "İkinci Sayfa",
            "main_page": "Ana Sayfa",
            "message":"Bu sayfa 2. sayfadır."
        }
    }""",
    "en": """{
        "main_page": {
            "title": "Main Page",
            "second_page": "Second Page"
        },
        "second_page": {
            "title": "Second Page",
            "main_page": "Main Page",
            "message":"This is 2nd page."
        }
    }""",
    "de": """{
        "main_page": {
            "title": "Hauptseite",
            "second_page": "Zweite Seite"
        },
        "second_page": {
            "title": "Zweite Seite",
            "main_page": "Hauptseite",
            "message":"Dies ist die 2. Seite."
        }
    }"""
  };
}

//MainPage
Scaffold(
  appBar: AppBar(
    title: Text(
        LanguageBuilder.texts['main_page']['title'],
    ),
  ),
),
 

Вы можете настроить приведенный выше пример для вашего случая. Для получения дополнительной информации взгляните на language_builder:

language_builder

Комментарии:

1. Спасибо @aedemirsen. Позвольте мне попробовать это в ближайшее время