rebellion 0.1.0 copy "rebellion: ^0.1.0" to clipboard
rebellion: ^0.1.0 copied to clipboard

A linter for Flutter's ARB files. Analyze ARB files and find possible issues, find missing translations and sort ARB files

Banner

Rebellion #

Rebellion is a linter for Flutter's ARB translation files.

Features:

  • Analyze ARB files and find possible issues
  • Find missing translations
  • Sort ARB files

At the moment rebellion is meant to be used as a CLI tool and can't be used as a custom lint rule. Consider adding it to your CI job to make sure all strings are translated and have no issues.

Installation #

dart pub global activate rebellion

Example #

> rebellion analyze ./lib/l10n/

l10n/intl_fi.arb: all caps string key "key2"
l10n/intl_fi.arb: no @@locale key found
l10n/intl_en.arb: key "@key4" is missing placeholders definition
l10n/intl_fi.arb key "key3" is missing a plural value "one"
l10n/intl_en.arb key "key3" contains a redundant plural value "zero"
l10n/intl_fi.arb: missing translation for key "key_5"
l10n/intl_fi.arb: @-key "@key" should only be present in the main file
l10n/intl_en.arb: key "key_5" does not match selected naming convention (camel case)

8 issues found

Analyze ARB files #

Find problems in ARB files:

rebellion analyze ./lib/l10n/

See Configuration section below to customize the set of rules.

Diff #

Find missing translations:

> rebellion diff ./lib/l10n/

l10n/intl_fi.arb: 2 missing translations:
 - key4
 - key_5

By default this command prints missing translations to the console. You can instruct Rebellion to create "diff" ARB files with missing translations using --output option (available values: console or file).

diff uses main app locale to compare ARB files. Default locale is en but you can change it using --main-locale option

Sort #

Sort ARB files alphabetically, in reverse alphabetical order or follow main ARB file's order:

rebellion sort ./lib/l10n/

Use --sorting to change sorting: alphabetical (default), alphabetical-reverse or follow-main-file

Configuration #

You can disable some rules, set sort and diff settings using a configuration file. Create a file called rebellion_options.yaml in the root of your app and enable certain rules and options:

# List all rules that rebellion should follow
rules:
    # Enable mandatory @-key description rule (it's off by default)
    - mandatory_at_key_description
    
    # Disable missing translations rule
    # - missing_translations

    # Enable all other rules
    - all_caps
    - string_type
    - at_key_type
    - duplicated_keys
    - empty_at_key
    - locale_definition
    - missing_placeholders
    - missing_plurals
    - naming_convention
    - redundant_at_key
    - redundant_translations
    - unused_at_key

options:
  # Set main locale
  main_locale: en
  
  # Set naming convention that all keys should follow
  # Available options: snake or camel
  naming_convention: snake

  # Set sorting for the `sort` command
  # Available options: alphabetical, alphabetical-reverse, follow-main-file
  sorting: alphabetical

If this YAML file could not be found, default set of options is used. Consider committing this file to git so all developers and CI actions use the same config.

Available rules #

  • missing_plurals #

    Check that plural strings contain all required plural options for current locale and don't contain unused strings for this locale.

    For example:

    • English uses one ("1 book") and other ("0 books", "20 books"). All other options are never used
    • French uses one, many and other
    • Arabic uses zero, one, two, few, many, other
    • Vietnamese uses other
  • missing_placeholders #

    Check that @-keys don't contain empty placeholders

  • all_caps #

    Check that strings are not written in capital letters

  • string_type #

    Check that all strings are of type String

  • at_key_type #

    Check that @-key has correct type

  • duplicated_keys #

    Check that ARB files don't contain duplicated keys

  • empty_at_key #

    Check that ARB files don't contain empty @-keys

    There's no need for ARB files

  • locale_definition_presence #

    Check that ARB file has locale definition key (@@locale)

  • locale_definition_allowlist #

    Check that locale is in the list of locales supported by Flutter's intl package

  • locale_definition_match #

    Check that locale in the filename and @@locale value match

  • mandatory_at_key_description #

    Check that all @-keys have description provided. Disabled by default

  • missing_translations #

    Check that translation files have strings for all keys (checked against the main localization file)

  • naming_convention #

    Check that key names are following naming conventions (camelCase or snake_case)

  • redundant_at_key #

    Check that only main localization file contains @-keys

  • redundant_translations #

    Check that translation files don't have keys not present in the main localization file

  • unused_at_key #

    Check that all @-keys have corresponding key

Ignoring rules for individual keys #

Rules can be ignored for individual keys. Use @@x-ignore inside @-key body to list ignored list. For example, here all caps rules is ignored because this string is short and uses upper-case on purpose:

{
  "indicatorLost": "X",
  "@indicatorLost": {
    "description": "Indicates a failed attempt",
    "@@x-ignore": "all_caps"
  }
}

Ignoring multiple rules can be done by listing all ignored rules:

"@@x-ignore": ["all_caps", "naming_convention"]

Updating plurals rules #

Rebellion uses Unicode's plural rules when checking if certain plural options should be or should be not present in a translation file. To get updated rules in a format that Rebellion understands, run the script:

dart packages/plural_rules_generator/bin/plural_rules_generator.dart ./lib/src/generated/plural_rules.dart

There's a CI action that runs this script periodically so rules are up-to-date.

Name #

  • "Rebel" is from Rebel App Studio
  • "Lion" is l10n (localization) that could be misread as lion

It's rebel, lion and localization at the same time. Roar!

3
likes
150
points
97
downloads

Publisher

verified publisherrebelappstudio.com

Weekly Downloads

A linter for Flutter's ARB files. Analyze ARB files and find possible issues, find missing translations and sort ARB files

Repository (GitHub)
View/report issues

Topics

#localization #l10n #lints #analysis #analyzer

Documentation

API reference

License

MIT (license)

Dependencies

analyzer, args, collection, equatable, file, json_events, meta, path, yaml

More

Packages that depend on rebellion