Flutter как определить язык устройства? - PullRequest
0 голосов
/ 17 июня 2020

У меня вопрос, как я могу определить язык устройства и в соответствии с этим при запуске приложения изначально указать правильный язык? Если возможно, предоставьте пример кода.

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вызов Localizations.localeOf(context).languageCode должен вернуть вам languageCode. MaterialApp создает и использует локализацию по умолчанию, если она не предоставлена, а затем вы можете вызвать ее после MaterialApp, чтобы узнать язык, на котором в настоящее время используется устройство, и обновить свое приложение этой информацией с помощью вашего State Managament.

Мой совет для простой проект - использовать этот плагин для VS IDE (или this для Android Studio, это от того же автора). После его установки просто добавьте зависимости в свой pubspe c .yaml

dependencies:
  // Other dependencies...
  flutter_localizations:
    sdk: flutter

  ...

  flutter_intl:
    enabled: true
    class_name: S # Optional. Sets the name for the generated localization class. Default: S
    main_locale: en # Optional. Sets the main locale used for generating localization files. Provided value should comply with ISO-639-1 and ISO-3166-1 (e.g. "en", "en_GB"). Default: en

In Android Studio (я действительно не знаю, где в VS, извините) проверьте Tools > Flutter intl (он должен быть в конец), и там вы можете инициализировать свой проект и добавить языковые стандарты. Теперь в вашем проекте должна быть папка lib/l10n с файлами arb, они выглядят как файлы JSON, просто добавьте ключ со строкой. Создайте по одному для каждой языковой версии, которую хотите, и дайте им параметры строки для каждого языка

intl_en.arb {"name": "У меня есть имя"}

intl_es.arb {"name" : "Yo ten go un Nombre"}

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

import 'package:flutter_localizations/flutter_localizations.dart';
import 'generated/l10n.dart';

class MyApp extends StatelessWidget {
    @override
    Widget build(BuildContext context) {
        return new MaterialApp(
            localizationsDelegates: [
                S.delegate, //The class S
                GlobalMaterialLocalizations.delegate,
                GlobalWidgetsLocalizations.delegate,
                GlobalCupertinoLocalizations.delegate,
            ],
            supportedLocales: S.delegate.supportedLocales,
            title: 'Flutter Demo',
            home: MyHomePage(),
        );
    }
}

Теперь вы можете использовать его в дереве виджетов

class MyHomePage extends StatelessWidget{
   @override
   Widget build(BuildContext context){
     return Text(S.of(context).name) 
     // now it prints the string of name depending the language the device is
   }
}

Если устройство работает на языке, который вы не поддерживаете (например, французский в моем случае), оно будет использовать язык класса по умолчанию en ('Engli sh), отметьте main_locale в pubspe c, если вы хотите использовать другой по умолчанию

Отметьте это Пример того, как использовать интернационализацию с JSON ключами, если вы хотите попробовать что-то другое.

0 голосов
/ 17 июня 2020

Вы, вероятно, найдете все, что ищете, в Internationalizing Flutter Apps do c!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...