Flutter i18n 플러그인 사용

소개



Flutter의 공식으로 소개되고 있다 Internationalizing (을)를 사용하면(자), 언어 파일의 갱신이 너무 지나치게 무리였으므로,
Flutter i18n 플러그인으로 다언어화를 편하게 한 비망.

환경


  • Flutter 1.7.8+hotfix.4
  • Dart 2.4.0
  • Android studio 3.5

  • 이전 준비



    Flutter i18n 플러그인 설치
    (플러그인 설치만 하기 때문에 할애)

    Flutter i18n 플러그인



    해주는 것


  • arb 파일로부터 Internationalizing용의 파일을 자동 생성해 준다
    파일 자체는 "generated/i18n.dart"일 수 있습니다

  • 스스로 해야 할 일


  • arb 파일의 내용을 기술한다

  • 주의사항


  • 플러그인을 넣으면 res/values ​​/strings_en.arb라고 말할 수 있지만 이것은 지워서는 안됩니다.
  • 자동 생성 파일은 strings_en.arb에 정의 된 키의 사물 만 생성됩니다.
  • 플러그인 페이지에 쓰여진 대로,
  • return new MaterialApp(
      localizationsDelegates: [S.delegate],
      supportedLocales: S.delegate.supportedLocales,
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
    

    라고 하면, Scaffold의 Appbar 주위가 에러 토한다.
    (MaterialLocalizations 사용하고 있지만, en 이외는 디폴트로 보지 않기 때문에 에러가 된다)
    이하와 같이 써야 한다.
    
    import 'package:your_app_name/generated/i18n.dart';
    import 'package:flutter_localizations/flutter_localizations.dart';
    
    // ・・・ 
    
    return new MaterialApp(
      localizationsDelegates: [
        S.delegate,
        GlobalMaterialLocalizations.delegate,
        GlobalCupertinoLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
      ],
      supportedLocales: S.delegate.supportedLocales,
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new MyHomePage(title: 'Flutter Demo Home Page'),
    );
    

    쿠파치노 사용하지 않는 경우에도, GlobalCupertinoLocalizations 하지 않으면 안된다.
    텍스트 필드를 길게 누르면 앱이 충돌합니다.

    TextField를 길게 눌러 충돌하는 문제를 해결하는 방법

    사용법



    언어를 더하는 방법



    ${project_root}/res/values를 선택한 상태에서,
    [File] - [New] - [Arb File]

    이런 다이얼로그가 나오므로 언어를 선택한다. 방언은 임의.


    만든 arb 파일에 설정을 추가해 간다



    strings_en.arb
    {
      "_comment": "アプリ名",
      "appName": "my app name",
    
      "_comment": "コメント適当に入れながら書いてく",
    
    }
    

    strings_en.arb
    {
      "_comment": "アプリ名",
      "appName": "アプリ名適当に入れて",
    
      "_comment": "コメント適当に入れながら書いてく",
    
    }
    

    파일 변경 시점에 자동 생성
    덧붙여서 자동 생성 파일을 스스로 편집하려고 해도 자동 생성된 상태로 돌아온다

    이 정의 자체는 nest한 Object로 정의할 수 없기 때문에, 코멘트 작성하면서 하는 것이 좋다.
    같은 키의 것은 가장 마지막 것만이 자동 생성되어 추가되므로 원하는만큼 추가는 가능.
    (단, ide가 시각적으로 시끄럽다는 난점이・・・)

    사용법


    
    import 'package:your_app_name/generated/i18n.dart';
    
    // ・・・ 
    
    @override
    Widget build(BuildContext context) {
      var name = S.of(context).appName;
    }
    
    

    location은 platform 레벨의 언어 설정에 의존할 수 밖에 없는 것 같다?
    앱 레벨에서 다시 작성할 수 있다면 어떻게 일단 알고 싶다는 생각이 있으므로, 누군가를 가르쳐 주세요.

    끝에



    Map에서 정의하고 getter 살리거나 명령 몇 번이나 스스로 두드려야 할까라고 생각하고 힘들 것 같다. . 라고 생각했지만,
    이 플러그인이 있으면 스트레스없이 다국어화할 수 있습니다.

    en가 필수가 되어 버립니다만, 다언어화는 맛있는 경우는, 일본어로 돌진하면 좋다고 생각합니다.
    (지금 자신이 만들고 있는 것은 그렇게 되어 있다)

    좋은 웹페이지 즐겨찾기