[Flutter] 4개의 다국어 포장을 해봤어요. [철저한 비교]

24718 단어 FlutterDarttech

개시하다


Fluter를 다언어로 응용한 패키지가 여러 개 있는데, 어느 것을 사용해야 좋을지 몰라서 많이 시도했어요!
이번에 비교한 것은 다음과 같은 네 가지다.마지막으로 총결산도 있으니 참고하세요.모두 샘플 코드가 첨부되어 있습니다.

  • flutter_localizations(Fluter SDK 표준)
  • fast_i18n
  • easy_localization
  • flutter_translate
  • !
    이 글은 가져오는 방법에 대한 설명이 없지만 가져오는 방법에 대한 글의 링크가 있으니 참고하시기 바랍니다.

    결론


    제 추천은fast_i18n!context 상수 방문 없이 방문하는 게 좋아요!저는 포장명을 싫어해요.😅
    다음 점은flutter_localizations!
    그럼 우리 한 명씩 봅시다.

    flutter_localizations


    https://docs.flutter.dev/development/accessibility-and-localization/internationalization

    사용법


    lib/l10n/app_en.arb
    {
      "@@locale": "en",
      "title": "Flutter Sample Localizations",
      "@title": {
        "description": "This is Comments."
      },
      "message": "You have pushed the button this many times: {count}",
      "@message": {
        "description": "引数を与えることは出来るけど名前付き引数になりません。",
        "placeholders": {
          "count": {
            "type": "int",
            "format": "compact"
          }
        }
      }
    }
    
    lib/l10n/app_ja.arb
    {
      "@@locale": "ja",
      "title": "多言語化サンプル",
      "message": "ボタンを押した回数: {count}"
    }
    
    @@locale에 지정된 언어입니다.description는 주석입니다.placeholders에서 매개변수의 유형과 형식을 지정할 수 있습니다.지정하지 않았을 때는 Object형이다.
    자원 접근 방법
    AppLocalizations.of(context)!.title; // => '多言語化サンプル'
    AppLocalizations.of(context)!.message(_counter); // => 'ボタンを押した回数: 10'
    

    좋은 곳

  • SDK 표준 기능이므로 유지 관리 위험 없이 안심하고 사용할 수 있음
  • 많은 일본어 문장이 도입 방법을 해설했다
  • 리소스에 상수로 액세스 가능
  • 리소스 파일 형식ARB에 사용할 수 있는 유일한 방법
  • 좋지 않은 곳

  • 리소스 파일 형식은 ARB 전용
  • 리소스 파일에서 추가 리소스를 참조할 수 없음
  • 리소스 액세스에 필요context
  • Android Studio에서 자동으로 생성된 파일 표시 오류(빨간색 밑줄 사용)
  • 빌딩은 통과했기 때문에 안드로이드 스튜디오의 버그로 여겨지지만 매우 신경을 쓴다
  • 아래와 같이 l10n.yaml 파일에 지정synthetic-package: false하고 부하 아래 자동 생성 파일.dart_tool을 생성하면lib 해제
  • https://github.com/susatthi/flutter-sample-localizations/blob/ba4e377754540eb63d21e72542356aec355dc51a/l10n.yaml#L6

    가져오기 방법


    https://flutter.salon/flutter/l10n/
    https://techgamelife.net/2021/10/21/flutter-simple-localization/
    https://qiita.com/yukihiroK/items/d431036401ae5bbc06f9

    샘플 코드


    https://github.com/susatthi/flutter-sample-localizations

    fast_i18n


    https://pub.dev/packages/fast_i18n

    사용법


    lib/i18n/strings_ja.i18n.json
    {
      "sample": {
        "title": "多言語化サンプル",
        "message": "[@:sample.title] ボタンを押した回数: $count",
        "@message": "これはコメントです"
      }
    }
    
    @:<リソース名>에서 다른 리소스를 참조할 수 있습니다.리소스 이름의 시작 부분@을 더하면 메모로 처리됩니다.매개 변수는 $count 이외에도 {count} 또는 {{count}}일 수 있다.
    자원 접근 방법
    t.sample.title; // => '多言語化サンプル'
    t.sample.message(count: _counter); // => '[多言語化サンプル] ボタンを押した回数: 10'
    
    명명된 매개변수로 값을 지정합니다.글로벌 인스턴스t는 설정을 통해 앨리어스로 변경할 수 있습니다.
    lib/i18n/strings_ja.i18n.yaml
    sample:
      title: '多言語化サンプル' # これはコメントです。
      message: '[@:sample.title] ボタンを押した回数: $count'
    
    YAML 형식으로도 쓸 수 있다.
    lib/i18n/sample.i18n.csv
    key,(comments),en,ja
    title,これはコメントです。,Flutter Sample Localizations,多言語化サンプル
    message,コメントはコメントとして出力されます。,[@:sample.title] You have pushed the button this many times: $count,[@:sample.title] ボタンを押した回数: $count
    
    CSV 형식으로 작성할 수도 있습니다.첫 번째 줄의 언어 이름을 ()로 설정하면 이 열은 주석으로 처리됩니다.

    좋은 곳

  • README가 충실하고 가져오기 쉽다
  • 리소스에 대한 네임스페이스[1]
  • 리소스 파일 포맷 풍부(JSON/YAML/CSV)
  • 리소스를 List 또는 Map 형식으로 정의할 수 있음
  • 리소스에 액세스할 때 필요 없음context
  • 리소스에 상수로 액세스 가능
  • 리소스에 액세스할 때 명명된 매개변수 사용
  • 자주 유지 관리
  • 좋지 않은 곳

  • 사전 필요build_runner
  • 가져오기 방법


    https://qiita.com/popy1017/items/3495be9fdc028161bef9

    샘플 코드


    https://github.com/susatthi/flutter-sample-fast-i18n

    easy_localization


    https://pub.dev/packages/easy_localization

    사용법


    assets/translations/ja-JP.json
    {
      "sample": {
        "title": "多言語化サンプル",
        "message": "[@:sample.title] ボタンを押した回数: {count}"
      }
    }
    
    @:<リソース名>에서 다른 리소스를 참조할 수 있습니다.
    자원 접근 방법
    'sample.title'.tr(); // => '多言語化サンプル'
    'sample.message'.tr(
      namedArgs: {
        'count': '$_counter',
      },
    );
    // => '[多言語化サンプル] ボタンを押した回数: 10'
    
    assets/translations/ja-JP.yaml
    sample:
      title: '多言語化サンプル' # これはコメントです。
      message: '[@:sample.title] ボタンを押した回数: {count}'
    
    YAML 형식으로도 쓸 수 있다.
    assets/translations/ja-JP.xml
    <?xml version="1.0" encoding="utf-8" ?>
    <strings>
        <sample.title>多言語化サンプル</sample.title>
        <sample.message>[@:sample.title] ボタンを押した回数: {count}</sample.message>
    </strings>
    
    XML로 작성할 수도 있습니다.
    assets/translations/strings.csv
    key,en_US,ja_JP
    sample.title,Flutter Sample Localizations,多言語化サンプル
    sample.message,[@:sample.title] You have pushed the button this many times: {count},[@:sample.title] ボタンを押した回数: {count}
    
    CSV 형식으로 작성할 수도 있습니다.

    좋은 곳

  • 많이 쓰신다
  • 리소스의 네임스페이스에 해당
  • 풍부한 리소스 파일 형식
  • 기본값은 JSON 전용

  • 사용easy_localization_loader CSV/XML/YAML
  • 사전 필요 없음build_runner
  • 리소스 파일에서 다른 리소스 참조
  • 리소스에 액세스할 때 필요 없음context
  • 리소스에 대한 풍부한 접근 방법
  • 리소스에 액세스하는 방법은 다양합니다.
    Text('title').tr(); // Text widget
    print('title'.tr()); // String
    var title = tr('title'); // Static function
    

    좋지 않은 곳

  • 리소스를 상수로 액세스할 수 없음
  • 문자열로 접근하기 때문에 typo일 수도 있고 IDE의 상호보완 기능을 사용할 수 없음
  • 리소스 파일에 의견을 달 수 없음
  • 구축 후 얼마 지나지 않아 번역되지 않은 문자[2](열 리셋 시 수정)

  • easy_localization_loader의 문서가 매우 적고 CSV/XML/YAML의 파일 형식을 잘 몰라요
  • 가져오기 방법


    https://www.kamo-it.org/blog/27/

    샘플 코드


    https://github.com/susatthi/flutter-sample-easy-localization

    flutter_translate


    https://pub.dev/packages/flutter_translate

    사용법


    assets/i18n/ja_JP.json
    {
      "sample": {
        "title": "多言語化サンプル",
        "message": "ボタンを押した回数: {count}",
      }
    }
    
    자원 접근 방법
    translate('sample.title'); // => '多言語化サンプル'
    translate(
      'sample.message',
      args: {
        'count': _counter,
      },
    );
    // => 'ボタンを押した回数: 10'
    

    좋은 곳

  • 리소스에 액세스할 때 필요 없음context
  • 리소스의 네임스페이스에 해당
  • 선택한 언어 설정을 저장하는 기능
  • 사전 필요 없음build_runner
  • 좋지 않은 곳

  • 문서 부족
  • 리소스 파일 형식은 JSON 전용
  • 가져오기 방법


    일본어 기사를 찾을 수 없습니다.

    샘플 코드


    https://github.com/susatthi/flutter-sample-flutter-translate

    총결산


    정리를 해도 패스트예요.듣자니 i18n이 매우 좋다고 한다.꼭 해보세요!
    flutter_localizations
    fast_i18n
    easy_localization
    flutter_translate
    pub.dev 👍 숫자.
    -
    113
    1476
    146
    GitHub ⭐ 숫자.
    -
    123
    607
    297
    1차 발행일
    -
    2020/07/26
    2018/12/22
    2019/10/10
    최신 릴리즈 날짜
    -
    2022/04/12
    2021/02/20
    2021/05/08
    파일 형식
    ARB
    JSONYAMLCSV
    JSONYAMLCSVXML
    JSON
    리소스 파일 주석


    ×
    ×
    리소스에 액세스할 때 명명된 매개변수를 사용할 수 있습니다.
    ×

    [3]
    ×
    자원 파일에서 다른 자원 인용
    ×


    ×
    리소스에 액세스할 필요 없음context×



    리소스에 항상 액세스 가능


    ×
    ×
    대응하는 자원 명칭 공간
    ×



    리소스는 List 또는 Map에서 정의할 수 있습니다.
    ×

    ×
    ×
    사전 요구 사항 없음build_runner[4]
    ×


    샘플 코드
    코드
    코드
    코드
    코드

    최후


    나는 Fluter대학이라는 Flutter 엔지니어에 전문적으로 종사하는 학습 단체에 속한다.관심 있는 사람은 이 페이지부터 참가할 수 있다.
    https://flutteruniv.com/

    같이 읽고 싶어요.


    https://mabots.hatenablog.com/entry/20120214/1329225300
    각주
    예를 들어 page1.titlepage2.title는 같지만 명명 공간을 분리해서 각각 처리할 수 있다↩︎
    버전 3.0.0↩︎
    사용 가능title하므로 유사↩︎
    Map 저장 시 자동 생성 가능↩︎

    좋은 웹페이지 즐겨찾기