A super simple l10n tool with auto translations via GoogleSheet.

Overview

Flutter Tranlsation Sheet header

Flutter Translation Sheet Generator [fts]

Command line application to make your l10n super fast. Compose your strings in yaml/json format and use GoogleSheet for auto translate.

pub package likes style: pedantic buy me a coffee GitHub last commit

All Contributors

GitHub stars GitHub forks GitHub watchers GitHub followers

🧰 Install:

You need to have flutter or dart SDK in your System PATH.

flutter pub global activate flutter_translation_sheet

Now just run fts in any folder to create a template configuration file.

Check --help on any sub-command of fts:

  • fts run
  • fts fetch
  • fts extract
  • fts upgrade
  • fts --version

⚙️ Usage:

Go with your terminal in any folder (or Flutter project folder), and run fts run.

First time will create a template for you, and you will have to get your Google credentials json.

Once you get the json, go to tfconfig.yaml and in the gsheet: there are two ways to fill the credentials (you only need to use one):

  1. Add credentials_path: followed by the path of your json. You can copy the json file to the root folder of your project. The path can be absolute or relative.

Example:

gsheets:
  credentials_path: c:/my_project/credentials.json or ./credentials.json

⚠️ NOTE TO WINDOWS USERS: paths should be either in the form "C:\\Users\\etc", with two backslash characters, or using forwardslash characters instead such as "C:/Users/etc".

  1. Add credentials: followed by the whole credentials json content

Example:

gsheets:
  credentials: {
    "type": "service_account",
    "project_id": "project-id",
    "private_key_id": "",
    "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCB-----END PRIVATE KEY-----\n",
    "client_email": "[email protected]",
    "client_id": "123456",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/gsheets%40evolution-cp-calculator.iam.gserviceaccount.com"
  }

You can find more information in the comments in tfconfig.yaml and fill the gsheet: section, and change the output folder as needed.

Once you have your configuration file ready, run fts to generate your sample google sheets.

Take the sample data input as reference, and use it in your own project.

fts will try to keep the local input and the remote sheet in sync, and automatically generate the locales for you every time you run it.

You can leave a terminal open and use the run command while listening for file changes in your master strings folder, or your trconfig.yaml: fts run --watch. You can exit the watch with q and then press Enter.

⚠️ Warning:

Watch out how often you modify the files and save them. Remember that your Google service account has usage limits.

After a while of not using it, Google Sheet performance slow down on every request, so it might take a little longer to get the output generated. Once it warms up (run 1 time) the sync performance is pretty solid.

fts fetch

Unlike fts run, fetch doesn't sync, nor validates the data structure.

Uses the local strings as entry map, downloads the latest data from GoogleSheet and generates the files accordingly. Is a much faster process. Very useful when you made manual corrections in your sheets for the auto-translated locales.

Do not manually modify the master language column on your Google Sheet, change the data in the string source file and let fts do the upload.

If there are differences of master lang strings between local and remote, the entire row will be cleared and regenerated with auto translation using the latest strings, and manual changes will get lost.

Currently you have to be careful, and keep your manual translations backed up just in case you modify the master language string.

Variables:

To store "variables" or placeholders in your strings to be replaced later in your code, use the follow notation:

"Welcome back {{user}}, today is {{date}}."

It will store the values in the sheet as {{0}} {{1}} and so on, to avoid complications with GoogleTranslate (although in rare cases GTranslate will truncate the {{}} somehow, don't worry), and it will generate a vars.lock file in the directory where you point your "entry_file" in config.

So you can define your own pattern for the code/json generation:

## pattern to applies final variables in the generated json/dart Strings.
## Enclose * in the pattern you need.
## {*} = {{name}} becomes {name}
## %* = {{name}} becomes %name
## (*) = {{name}} becomes (name)
## - Special case when you need * as prefix or suffix, use *? as splitter
## ***?** = {{name}} becomes **name**
param_output_pattern: "{{*}}"

⚠️ Warning:

Do not confuse the data source placeholder format with param_output_pattern configuration. Data-source (your yaml strings) must have this form {{variable}} to be interpreted as variables. The generated output strings uses param_output_pattern configuration to render the variables as you please.

Utilities:

  • fts extract [--path] [--output]: This tiny utility command performs a shallow search (no syslinks) of your dart classes and uses a basic pattern matching to capture your code's Strings. Might come in handy when you wanna localize an app with hardcoded texts. It only process '.dart' files, and the String matching isn't very permissive (single words Strings are skipped). Pass the folder to analyse in --path and the folder (or json file) path to save in --output. It will output a single json file cloning the structure of the source code folder tree for easy manual search. It's up to you to clean it up, adjust keys, split it up in other data source files, and USE it with "Flutter Translate Sheet". This command tool is in alpha state, but don't worry, as it doesn't touch any of analyzed files, so is safe.

It captures interpolated strings in your dart code, variables like $name, or ${obj.friends.length}, and use them as placeholders: $name becomes {{name}} and ${obj.friends.length} becomes {{length}}.

  • New options added: [-s] captures all Strings (event without spaces), and [-e] allows you to define a comma separated list of file extensions to search for Strings, like -e dart,java,kt,arb

Also... when you specify an --output that ends with .yaml, you will have a pretty cool template to plug into fts run :)

  • If you run the cli on macos, fts keeps your iOS app bundle synced automatically with the locales! One thing less to worry about.

arb and Intl:

We have an experimental support for arb generation. In config.yaml just set (or create if it doesnt exists) this field. (This tag will soon be changed to something more "generic" as arb output).

intl:
  enabled: true

Example of .arb readable metadata:

  today: "Today is {{date}}, and is hot."
  "@today":
    description: Show today's message with temperature.
    placeholders:
      date:
        type: DateTime
        format: yMMMEd

For plurals, we have a custom way of writing the dictionary. Just use plural:variableName: so fts knows how to generate the String. Remember that other is mandatory (the default value) when you use plurals.

Raw way of adding the metadata:

  ### not required, but you will be a much cooler dev if you provide context :)
  "@messageCount":
    {
      "description": "New messages count on the Home screen",
      "placeholders": { "count": {} },
    }

  messageCount:
    plural:count:
      =0: No new messages
      =1: You have 1 new message
      =2: You have a couple of messages
      other: You have {{count}} new messages

Previous yaml will output in lib/l10n/app_en.arb (or the path you defined in arb-dir inside l10n.yaml) : "messageCount": "{count,plural, =0{No new messages}=1{You have 1 new message}=2{You have a couple of messages}other{You have {count} new messages}}",

Now you can also capture internal variables in the plural/selector modifiers, and add the type and parsing information into it!

messageCount:
    plural:count:
      =0: No new messages
      =1: You have 1 new message. You won {{money:int:compactCurrency(decimalDigits:2,name:"Euro",symbol:"€")}}, congratulations!
      =2: You have a couple of messages
      other: You have {{count:int}} new messages

All {{variables}} supports this special way to define name, type, format, arguments. Useful when you don't want to use the @meta arb approach.

The "format" part applies to NumberFormatter and DateFormat constructors. {{variable:Type:Format(OptionalNamedArguments)}}

Selectors (like gender), are also included for the arb generation, although not yet supported on intl for code generation:

roleWelcome:
  selector:role:
    admin: Hi admin!
    manager: Hi manager!
    other: Hi visitor.

output arb:

"mainRoleWelcome": "{role, select, admin {Hi admin!} manager {Hi manager!} other {Hi visitor.} }",
"@mainRoleWelcome": {
    "description": "Auto-generated for mainRoleWelcome",
    "placeholders": {
        "role": {
            "type": "String"
        }
    }
}

📝 Utilities:

You can use SimpleLangPicker() widget when you generate the dart code (included by default in `TData class]). Is meant to be a quick tester to change languages. For example, if you use GetX for translations:

return Scaffold(
  appBar: AppBar(
    title: Text(widget.title),
    actions: [
      SimpleLangPicker(
        onSelected: Get.updateLocale,
        selected: Get.locale,
      ),
    ],
  ),
  ...

We will try to provide a richer experience integrating more libraries outputs in the future.

📝 Considerations:

  • Is preferable to keep the trconfig.yaml in the root of your project, some commands assumes that location (like arb generation).

  • When using arb output, make sure you have l10n.yaml next to the trconfig.yaml at the root of your project.

  • In your spreadsheet, the first column will always be your "keys", don't change that, don't move the column.

  • In your trconfig.yaml, the first locale you define is your master language:

locales:
  - es ## master language used in `entry_file`
  - en ## language list to translate.
  - ko
  • The tool only analyzes the locales in your config... will not keep updated any other sheet column with other locales.

  • You can move the columns, or add new columns, around as long as the keys is always the first (A1).

  • The 1st ROW in your sheet are the "headers", don't change the autogenerated names.

  • If fts finds the 2nd ROW empty in any column, it will take the data corrupted, and will re-upload for translation.

  • If the row count from keys is different from the master language, it will invalidate the entire sheet.


Thanks for passing by!

Contributors

Thanks goes to these wonderful people (emoji key):


IsmailAlamKhan

🚧 💻

Nicolas Lopez

💻 🤔

Leo

📖 🚧

This project follows the all-contributors specification. Contributions of any kind welcome!

Comments
  • Refer to other keys

    Refer to other keys

    I have this strings.yaml:

    app: 
      title: My App
    screen:
      learnMore: Learn here about My App
    

    Instead of repeating My App twice is it possible to refer to the appTitle key directly?

    PS: Thank for the great package! I am surprised it does not have more stars.

    opened by fotiDim 16
  • Installation Help

    Installation Help

    When I install fts using

    flutter pub global activate flutter_translation_sheet

    I get a warning:

    Warning: Executable "fts" runs "bin/main.dart", which was not found in flutter_translation_sheet.

    If I subsequently runfts run to create the template, I get:

    No active package flutter_translation_sheet.

    What am I missing?

    opened by tim-coder 2
  • Add Android 13 support.

    Add Android 13 support.

    As Android 13 now behaves similar to iOS with per-app language preferences, maybe makes sense to generate locales_config.xml and see if we add a common interfase to iOS/Android (native code) to retrieve and assign the selected locale from app's Settings.

    enhancement 
    opened by roipeker 1
  • unable to generate description and placeholders

    unable to generate description and placeholders

    where there a key (:main) set it will not generate the description and placeholder but if the key is removed it works completely fine main: appBarTitle: Flutter Demo homePageTitle: Flutter Demo Home Page
    counterMessage: "You have pushed the button this many {{counter}} times:"
    tooltip: Increment

    opened by rddewan 0
  • ## [1.0.9+18]

    ## [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    opened by roipeker 0
  • [

    ["1.0.8+17"]

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.
    opened by roipeker 0
  • Do not use BuildContexts across async gaps.

    Do not use BuildContexts across async gaps.

    fts generates a file .dart_tool/flutter_gen/gen_l10n/app_localizations.dart with the definition of abstract class AppLocalizations. I am using this class as documented:

    final AppLocalizations l10n = AppLocalizations.of( context )!;

    I also use the lint 2.0.1 package, which flags the statement above with the message:

    Do not use BuildContexts across async gaps. https://dart-lang.github.io/linter/lints/use_build_context_synchronously.html

    Why does fts generate app_localizations.dart with the line "import 'dart:async';"? It does not appear to use async/await. This may be the trigger for the warning above.

    opened by dv30fps 0
  • Updated Dependencies to resolve errors

    Updated Dependencies to resolve errors

    Updating to flutter 3.0.0 and Dart 2.17 leads to an error:

    /AppData/Local/Pub/Cache/hosted/pub.dartlang.org/win32-2.3.6/lib/src/structs.g.dart:662:38: Error: Setter not found: 'UnicodeChar'.
      set UnicodeChar(int value) => Char.UnicodeChar = value;
    

    Updated all dependencies to latest ones to resolve the issue.

    opened by leossmith 0
Releases(v1.0.25)
  • v1.0.25(Oct 21, 2022)

    [1.0.25]

    • internal fix to check if its running locally in dev mode.
    • fix for Windows shell. (thanks @IsmailAlamKhan)
    • fixes on Fts when loading from json.

    [1.0.24]

    • put back dependencies constrains for release.
    • put back fts upgrade code.

    [1.0.23]

    • fix bug with empty param_output_pattern and Fts.tr(namedArgs:)
    • added fts extract --exclude path1,pathN to exclude paths from capture.
    • added fts extract --clean to remove duplicated records.
    • added Fts.useMasterTextAsKey to use master text as key for translation, for example "Hello".tr()
    • added Fts.onSystemLocaleChanged notifier, receives the events when the window detects a locale change (like on Android 13)
    • change pubspec dependencies to NOT force any constrains (and avoid errors on flutter pub get)
    • cleaned up code.
    • renamed SimpleLangPicker to LangPickerMaterial and added LangPickerCupertino

    [1.0.22]

    • fix generated dart files format.
    • made "run" the default command when no arguments are passed.
    • add support for dev_dependencies.
    • add support to read the configuration (key fts:) from pubspec.
    • add support to read the configuration PATH (key fts: "path.yaml") from pubspec.
    • fix some code formatting.
    • add support for auto-include json assets folder in pubspec.flutter.assets
    • add Fts (and utils) to quickly test the internationalization in your app. output_fts_utils: true in the configuration.
    • add support for FTS_CREDENTIALS environment variable.
    • hide vars files, rename vars.lock to .vars.lock
    • when Fts is used (.tr() extension), you can specify fts_utils_args_pattern: "%s" for not-named variables.
    • add support for linked keys in vars, in the format {{@:title}}, fts does not include param_output_pattern in those cases.
    • add support to resolve linked keys in Fts at runtime.
    • add support to resolve linked keys at build time (add to root config resolve_linked_keys: true).

    [1.0.21]

    • Fix: .arb variables not being generated.

    [1.0.20]

    • added CLI check and warning for Sheet locale to avoid potential errors with the formula.
    • updated README.

    [1.0.19]

    • updated to dart sdk 2.17.
    • removed auto check for upgrade version.
    • fixed some styling for text in ANSI color output.

    [1.0.18+39]

    • improved code generation to match styling on latest flutter_lints in Flutter 2.5
    • make TKeys generation camelCase, and ensures no fields ends up private, or illegal (starts with number).
    • updated all dependencies to latest versions.

    [1.0.17+36]

    • improved README.md

    [1.0.17+35]

    • add support to unwrap long texts $ref: file.txt, extension has to be .txt. This allows to have long multiline (html/markup) in a plain text file, instead of doing it inside the yaml.

    [1.0.16+34]

    • remove type matching for optionalParameters in arb generation. This avoids issues with the main Type Example: double money isn't casting decimalDigits > {{money:double:currency(name:"Euro",symbol:"€",decimalDigits:2)}}

    [1.0.15+33]

    • readme fixes.
    • fix for locale key in LangVo.
    • improved SimpleLangPicker ui.

    [1.0.15+32]

    • dart format.

    [1.0.15+31]

    • preparing release for pub.dev

    [1.0.14+30]

    • fixed fts --version for local development.
    • added global catch() for sheet errors, to provide in the future better hints on the errors and possible solutions.
    • changed some wording on the error messages.
    • made some preparations files for a future init command.
    • custom arb placeholders are STILL broken. Should be revisit asap.

    [1.0.14+29]

    • Fixed the upgrade fts upgrade command.
    • Fix sorting of export file under [dart:output_dir]

    [1.0.14+27]

    • add fts run --watch to keep listening for file system changes in the config file and the directory that holds your master strings (entry_file parent folder).
    • [LangVo.flagChar] to read the flag "emojis" if supported by the system.
    • add default dart exports for [config.dart.output_dir] file.
    • add dart reserved words checking (and replacer) for the master strings tag, when generating TKeys files.

    [1.0.13+25]

    • add dart variable capture from interpolated strings in fts extract.
    • updated README

    [1.0.12+23]

    • fix version check for upgrades
    • added a better template in "example/"
    • force MacOs validation to run Info.plist edition. (Some linux distros have the plutil)
    • code docs.

    [1.0.12+22]

    • fix wrong paths for the sample template.

    [1.0.11+21]

    • change default trconfig.yaml template
    • added SimpleLangPicker Widget to simplify locale change.
    • added [TData.byKeys], [TData.getByKeys()], [TData.byText], [TData.getByText()] to support hot reload on Maps.
    • [TData.byText / TData.getByText()] allows you to Map your keys to your master language String.
    • added [TData.mapLocaleKeysToMasterText()] for the ability to convert keys to master string texts on demand.
    • added [AppLocales.systemLocale] and [AppLocales.systemLocales] utility to retrieve the system locale.

    [1.0.10+20]

    • force absolute paths.

    [1.0.9+19]

    • fix version mismatch.

    [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    • Automatic iOS Info.plist sync with locales (only macos).

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.

    [1.0.8+16]

    • Improved support for arb generation based on intl standards!
    • README improvements.

    [1.0.7+15]

    • improved extract with --ext and --permissive options to search for more file types, and allow capturing strings without spaces.
    • new [intl:enabled:true] option in trconfig.yaml to output arb files in lib.
    • other minor improvements. Still need to add docs and test new features.

    argParser.addOption('ext', defaultsTo: 'dart', abbr: 'e', help: 'Comma separated list of allowed file extensions types to analyze for strings.'); argParser.addFlag('permissive', abbr: 's', help: 'Toggles permissive mode, capturing strings without spaces in it.');

    [1.0.6+15]

    • small README fixes and formatting files.

    [1.0.6+14]

    • small README fixes.

    [1.0.6+13]

    • added extract command to get find strings in your dart files.
    • added extract docs to README.

    [1.0.5+11]

    • fixed README issues

    [1.0.5+10]

    • changed repo name and package name to flutter_translation_sheet
    • improved README with badges.

    [1.0.5]

    • rebranded to "Flutter Translation Sheet Generator"
    • changed cli program to fts
    • clean docs.
    • added AppLocales.of(locale) to search for LangVo (contains native and english name of the locale).
    • added toString() methods in Keys classes... that returns the keys 'path.' (might be useful to resolve gender, plurals based on the base key string).

    [1.0.4]

    • dynamic string tokens support!! type {{name}}, and define how to transform the output in config.yaml
    • more docs

    [1.0.3]

    • string tokens support!! {{name}}
    • more docs

    [1.0.2]

    • separated the cli in commands: fetch and run
    • more docs

    [1.0.1]

    • Some fixes and better messages for error exceptions.
    • more docs

    [1.0.0]

    • Initial version of trcli.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.23(Oct 21, 2022)

    [1.0.23]

    • fix bug with empty param_output_pattern and Fts.tr(namedArgs:)
    • added fts extract --exclude path1,pathN to exclude paths from capture.
    • added fts extract --clean to remove duplicated records.
    • added Fts.useMasterTextAsKey to use master text as key for translation, for example "Hello".tr()
    • added Fts.onSystemLocaleChanged notifier, receives the events when the window detects a locale change (like on Android 13)
    • change pubspec dependencies to NOT force any constrains (and avoid errors on flutter pub get)
    • cleaned up code.
    • renamed SimpleLangPicker to LangPickerMaterial and added LangPickerCupertino

    [1.0.22]

    • fix generated dart files format.
    • made "run" the default command when no arguments are passed.
    • add support for dev_dependencies.
    • add support to read the configuration (key fts:) from pubspec.
    • add support to read the configuration PATH (key fts: "path.yaml") from pubspec.
    • fix some code formatting.
    • add support for auto-include json assets folder in pubspec.flutter.assets
    • add Fts (and utils) to quickly test the internationalization in your app. output_fts_utils: true in the configuration.
    • add support for FTS_CREDENTIALS environment variable.
    • hide vars files, rename vars.lock to .vars.lock
    • when Fts is used (.tr() extension), you can specify fts_utils_args_pattern: "%s" for not-named variables.
    • add support for linked keys in vars, in the format {{@:title}}, fts does not include param_output_pattern in those cases.
    • add support to resolve linked keys in Fts at runtime.
    • add support to resolve linked keys at build time (add to root config resolve_linked_keys: true).

    [1.0.21]

    • Fix: .arb variables not being generated.

    [1.0.20]

    • added CLI check and warning for Sheet locale to avoid potential errors with the formula.
    • updated README.

    [1.0.19]

    • updated to dart sdk 2.17.
    • removed auto check for upgrade version.
    • fixed some styling for text in ANSI color output.

    [1.0.18+39]

    • improved code generation to match styling on latest flutter_lints in Flutter 2.5
    • make TKeys generation camelCase, and ensures no fields ends up private, or illegal (starts with number).
    • updated all dependencies to latest versions.

    [1.0.17+36]

    • improved README.md

    [1.0.17+35]

    • add support to unwrap long texts $ref: file.txt, extension has to be .txt. This allows to have long multiline (html/markup) in a plain text file, instead of doing it inside the yaml.

    [1.0.16+34]

    • remove type matching for optionalParameters in arb generation. This avoids issues with the main Type Example: double money isn't casting decimalDigits > {{money:double:currency(name:"Euro",symbol:"€",decimalDigits:2)}}

    [1.0.15+33]

    • readme fixes.
    • fix for locale key in LangVo.
    • improved SimpleLangPicker ui.

    [1.0.15+32]

    • dart format.

    [1.0.15+31]

    • preparing release for pub.dev

    [1.0.14+30]

    • fixed fts --version for local development.
    • added global catch() for sheet errors, to provide in the future better hints on the errors and possible solutions.
    • changed some wording on the error messages.
    • made some preparations files for a future init command.
    • custom arb placeholders are STILL broken. Should be revisit asap.

    [1.0.14+29]

    • Fixed the upgrade fts upgrade command.
    • Fix sorting of export file under [dart:output_dir]

    [1.0.14+27]

    • add fts run --watch to keep listening for file system changes in the config file and the directory that holds your master strings (entry_file parent folder).
    • [LangVo.flagChar] to read the flag "emojis" if supported by the system.
    • add default dart exports for [config.dart.output_dir] file.
    • add dart reserved words checking (and replacer) for the master strings tag, when generating TKeys files.

    [1.0.13+25]

    • add dart variable capture from interpolated strings in fts extract.
    • updated README

    [1.0.12+23]

    • fix version check for upgrades
    • added a better template in "example/"
    • force MacOs validation to run Info.plist edition. (Some linux distros have the plutil)
    • code docs.

    [1.0.12+22]

    • fix wrong paths for the sample template.

    [1.0.11+21]

    • change default trconfig.yaml template
    • added SimpleLangPicker Widget to simplify locale change.
    • added [TData.byKeys], [TData.getByKeys()], [TData.byText], [TData.getByText()] to support hot reload on Maps.
    • [TData.byText / TData.getByText()] allows you to Map your keys to your master language String.
    • added [TData.mapLocaleKeysToMasterText()] for the ability to convert keys to master string texts on demand.
    • added [AppLocales.systemLocale] and [AppLocales.systemLocales] utility to retrieve the system locale.

    [1.0.10+20]

    • force absolute paths.

    [1.0.9+19]

    • fix version mismatch.

    [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    • Automatic iOS Info.plist sync with locales (only macos).

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.

    [1.0.8+16]

    • Improved support for arb generation based on intl standards!
    • README improvements.

    [1.0.7+15]

    • improved extract with --ext and --permissive options to search for more file types, and allow capturing strings without spaces.
    • new [intl:enabled:true] option in trconfig.yaml to output arb files in lib.
    • other minor improvements. Still need to add docs and test new features.

    argParser.addOption('ext', defaultsTo: 'dart', abbr: 'e', help: 'Comma separated list of allowed file extensions types to analyze for strings.'); argParser.addFlag('permissive', abbr: 's', help: 'Toggles permissive mode, capturing strings without spaces in it.');

    [1.0.6+15]

    • small README fixes and formatting files.

    [1.0.6+14]

    • small README fixes.

    [1.0.6+13]

    • added extract command to get find strings in your dart files.
    • added extract docs to README.

    [1.0.5+11]

    • fixed README issues

    [1.0.5+10]

    • changed repo name and package name to flutter_translation_sheet
    • improved README with badges.

    [1.0.5]

    • rebranded to "Flutter Translation Sheet Generator"
    • changed cli program to fts
    • clean docs.
    • added AppLocales.of(locale) to search for LangVo (contains native and english name of the locale).
    • added toString() methods in Keys classes... that returns the keys 'path.' (might be useful to resolve gender, plurals based on the base key string).

    [1.0.4]

    • dynamic string tokens support!! type {{name}}, and define how to transform the output in config.yaml
    • more docs

    [1.0.3]

    • string tokens support!! {{name}}
    • more docs

    [1.0.2]

    • separated the cli in commands: fetch and run
    • more docs

    [1.0.1]

    • Some fixes and better messages for error exceptions.
    • more docs

    [1.0.0]

    • Initial version of trcli.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.15(Aug 8, 2021)

    [1.0.15+31]

    • preparing release for pub.dev

    [1.0.14+30]

    • fixed fts --version for local development.
    • added global catch() for sheet errors, to provide in the future better hints on the errors and possible solutions.
    • changed some wording on the error messages.
    • made some preparations files for a future init command.
    • custom arb placeholders are STILL broken. Should be revisit asap.

    [1.0.14+29]

    • Fixed the upgrade fts upgrade command.
    • Fix sorting of export file under [dart:output_dir]

    [1.0.14+27]

    • add fts run --watch to keep listening for file system changes in the config file and the directory that holds your master strings (entry_file parent folder).
    • [LangVo.flagChar] to read the flag "emojis" if supported by the system.
    • add default dart exports for [config.dart.output_dir] file.
    • add dart reserved words checking (and replacer) for the master strings tag, when generating TKeys files.

    [1.0.13+25]

    • add dart variable capture from interpolated strings in fts extract.
    • updated README

    [1.0.12+23]

    • fix version check for upgrades
    • added a better template in "example/"
    • force MacOs validation to run Info.plist edition. (Some linux distros have the plutil)
    • code docs.

    [1.0.12+22]

    • fix wrong paths for the sample template.

    [1.0.11+21]

    • change default trconfig.yaml template
    • added SimpleLangPicker Widget to simplify locale change.
    • added [TData.byKeys], [TData.getByKeys()], [TData.byText], [TData.getByText()] to support hot reload on Maps.
    • [TData.byText / TData.getByText()] allows you to Map your keys to your master language String.
    • added [TData.mapLocaleKeysToMasterText()] for the ability to convert keys to master string texts on demand.
    • added [AppLocales.systemLocale] and [AppLocales.systemLocales] utility to retrieve the system locale.

    [1.0.10+20]

    • force absolute paths.

    [1.0.9+19]

    • fix version mismatch.

    [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    • Automatic iOS Info.plist sync with locales (only macos).

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.

    [1.0.8+16]

    • Improved support for arb generation based on intl standards!
    • README improvements.

    [1.0.7+15]

    • improved extract with --ext and --permissive options to search for more file types, and allow capturing strings without spaces.
    • new [intl:enabled:true] option in trconfig.yaml to output arb files in lib.
    • other minor improvements. Still need to add docs and test new features.

    argParser.addOption('ext', defaultsTo: 'dart', abbr: 'e', help: 'Comma separated list of allowed file extensions types to analyze for strings.'); argParser.addFlag('permissive', abbr: 's', help: 'Toggles permissive mode, capturing strings without spaces in it.');

    [1.0.6+15]

    • small README fixes and formatting files.

    [1.0.6+14]

    • small README fixes.

    [1.0.6+13]

    • added extract command to get find strings in your dart files.
    • added extract docs to README.

    [1.0.5+11]

    • fixed README issues

    [1.0.5+10]

    • changed repo name and package name to flutter_translation_sheet
    • improved README with badges.

    [1.0.5]

    • rebranded to "Flutter Translation Sheet Generator"
    • changed cli program to fts
    • clean docs.
    • added AppLocales.of(locale) to search for LangVo (contains native and english name of the locale).
    • added toString() methods in Keys classes... that returns the keys 'path.' (might be useful to resolve gender, plurals based on the base key string).

    [1.0.4]

    • dynamic string tokens support!! type {{name}}, and define how to transform the output in config.yaml
    • more docs

    [1.0.3]

    • string tokens support!! {{name}}
    • more docs

    [1.0.2]

    • separated the cli in commands: fetch and run
    • more docs

    [1.0.1]

    • Some fixes and better messages for error exceptions.
    • more docs

    [1.0.0]

    • Initial version of trcli.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.13(Jul 27, 2021)

    [1.0.13+25]

    • add dart variable capture from interpolated strings in fts extract.
    • updated README

    [1.0.12+23]

    • fix version check for upgrades
    • added a better template in "example/"
    • force MacOs validation to run Info.plist edition. (Some linux distros have the plutil)
    • code docs.

    [1.0.12+22]

    • fix wrong paths for the sample template.

    [1.0.11+21]

    • change default trconfig.yaml template
    • added SimpleLangPicker Widget to simplify locale change.
    • added [TData.byKeys], [TData.getByKeys()], [TData.byText], [TData.getByText()] to support hot reload on Maps.
    • [TData.byText / TData.getByText()] allows you to Map your keys to your master language String.
    • added [TData.mapLocaleKeysToMasterText()] for the ability to convert keys to master string texts on demand.
    • added [AppLocales.systemLocale] and [AppLocales.systemLocales] utility to retrieve the system locale.

    [1.0.10+20]

    • force absolute paths.

    [1.0.9+19]

    • fix version mismatch.

    [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    • Automatic iOS Info.plist sync with locales (only macos).

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.

    [1.0.8+16]

    • Improved support for arb generation based on intl standards!
    • README improvements.

    [1.0.7+15]

    • improved extract with --ext and --permissive options to search for more file types, and allow capturing strings without spaces.
    • new [intl:enabled:true] option in trconfig.yaml to output arb files in lib.
    • other minor improvements. Still need to add docs and test new features.

    argParser.addOption('ext', defaultsTo: 'dart', abbr: 'e', help: 'Comma separated list of allowed file extensions types to analyze for strings.'); argParser.addFlag('permissive', abbr: 's', help: 'Toggles permissive mode, capturing strings without spaces in it.');

    [1.0.6+15]

    • small README fixes and formatting files.

    [1.0.6+14]

    • small README fixes.

    [1.0.6+13]

    • added extract command to get find strings in your dart files.
    • added extract docs to README.

    [1.0.5+11]

    • fixed README issues

    [1.0.5+10]

    • changed repo name and package name to flutter_translation_sheet
    • improved README with badges.

    [1.0.5]

    • rebranded to "Flutter Translation Sheet Generator"
    • changed cli program to fts
    • clean docs.
    • added AppLocales.of(locale) to search for LangVo (contains native and english name of the locale).
    • added toString() methods in Keys classes... that returns the keys 'path.' (might be useful to resolve gender, plurals based on the base key string).

    [1.0.4]

    • dynamic string tokens support!! type {{name}}, and define how to transform the output in config.yaml
    • more docs

    [1.0.3]

    • string tokens support!! {{name}}
    • more docs

    [1.0.2]

    • separated the cli in commands: fetch and run
    • more docs

    [1.0.1]

    • Some fixes and better messages for error exceptions.
    • more docs

    [1.0.0]

    • Initial version of trcli.
    Source code(tar.gz)
    Source code(zip)
  • v1.0.9(Jul 25, 2021)

    [1.0.9+18]

    • README improvements.
    • new arguments inside variables.
    • fixes Locale canonicalization, now uses the Flutter way: en_US instead of en-us
    • fixes Intl generator error when only languageCode_countryCode is defined (without the languageCode only fallback).
    • Much improved RegExp for variable detection in GoogleSheet cells, when GoogleTranslate corrupts the format breaking the generated code.
    • Automatic iOS Info.plist sync with locales (only macos).

    [1.0.8+17]

    • Improved support for arb generation based on intl standards!
    • Fixed error for clearing unused rows when you have more than one worksheet.
    • README improvements.

    [1.0.8+16]

    • Improved support for arb generation based on intl standards!
    • README improvements.

    [1.0.7+15]

    • improved extract with --ext and --permissive options to search for more file types, and allow capturing strings without spaces.
    • new [intl:enabled:true] option in trconfig.yaml to output arb files in lib.
    • other minor improvements. Still need to add docs and test new features.

    argParser.addOption('ext', defaultsTo: 'dart', abbr: 'e', help: 'Comma separated list of allowed file extensions types to analyze for strings.'); argParser.addFlag('permissive', abbr: 's', help: 'Toggles permissive mode, capturing strings without spaces in it.');

    [1.0.6+15]

    • small README fixes and formatting files.

    [1.0.6+14]

    • small README fixes.

    [1.0.6+13]

    • added extract command to get find strings in your dart files.
    • added extract docs to README.

    [1.0.5+11]

    • fixed README issues

    [1.0.5+10]

    • changed repo name and package name to flutter_translation_sheet
    • improved README with badges.

    [1.0.5]

    • rebranded to "Flutter Translation Sheet Generator"
    • changed cli program to fts
    • clean docs.
    • added AppLocales.of(locale) to search for LangVo (contains native and english name of the locale).
    • added toString() methods in Keys classes... that returns the keys 'path.' (might be useful to resolve gender, plurals based on the base key string).

    [1.0.4]

    • dynamic string tokens support!! type {{name}}, and define how to transform the output in config.yaml
    • more docs

    [1.0.3]

    • string tokens support!! {{name}}
    • more docs

    [1.0.2]

    • separated the cli in commands: fetch and run
    • more docs

    [1.0.1]

    • Some fixes and better messages for error exceptions.
    • more docs

    [1.0.0]

    • Initial version of trcli.
    Source code(tar.gz)
    Source code(zip)
Owner
Roi Peker
Roi Peker is a enthusiastic software developer and designer. Always looking to learn something new, trying to follow the greek concept "meraki" always.
Roi Peker
A simple flutter application that demonstrates authentication with pin or OTP sent via sms and also Fingerprint.

flutter_authentication A simple flutter application that demonstrates authentication with pin or OTP sent via sms and also Fingerprint. Getting Starte

OLUWATOMISIN ESAN 4 Apr 10, 2022
Item selling mobile app with secure payments with Payhere payment gateway. Auto APK generation with github actions CI/CD.

payhere_demo A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you started if

Shihara Dilshan 2 Jan 20, 2022
Super easy mood tracking app to demonstrate use of the Firebase Local Emulator Suite

Mood Tracker Example App in Flutter This is a simple example app showing how to use Cloud Functions and the Firebase Local Emulator inside a Flutter a

Andrea Bizzotto 8 Oct 14, 2022
Super Fast Cross Platform Database for Flutter & Web Apps

Isar Database ?? Alpha version - Use with care. ?? Quickstart • Documentation • Sample Apps • Support & Ideas • Pub.dev Isar [ee-zahr]: River in Bavar

Isar Database 2.1k Jan 1, 2023
A super-fast and efficient state management solution for Flutter...

turbo A super-fast, efficient state management solution for Flutter. Turbo does not use streams, which are extremely inefficient, or use complex abstr

Aldrin's Art Factory 4 Oct 16, 2022
Sharik is an open-source, cross-platform solution for sharing files via Wi-Fi or Mobile Hotspot

Share files across devices with Sharik! It works with Wi-Fi connection or Tethering (Wi-Fi Hotspot). No internet connection needed. Contributing Feel

Mark Motliuk 844 Jan 1, 2023
A news application that fetches the latest news via an API and displays, in a reverse sorted chronological way.

News App Description A news application that fetches the latest news via an API and displays, in a reverse sorted chronological way. Features Nativ Sp

Nishant Andoriya 3 Jun 24, 2022
A robust Flutter plugin for making payments via Paystack Payment Gateway. Completely supports Android and iOS

?? Paystack Plugin for Flutter A Flutter plugin for making payments via Paystack Payment Gateway. Fully supports Android and iOS. ?? Installation To u

Wilberforce Uwadiegwu 165 Jan 4, 2023
App can detect COVID via X-Ray image, just use some sample image available in the listed links.

Covid19detector : Detecting COVID-19 from X-Ray ?? App can detect COVID via X-Ray image, just use some sample image available in the listed links. And

Sanskar Tiwari 21 Jun 14, 2022
A discord bot, made with Dart, which lets you run your own pure Dart code snippets directly via a discord ping, and get the output in an instant.

A discord bot, made with Dart, which lets you run your own pure Dart code snippets directly via a discord ping, and get the output in an instant.

Anikate De 3 Oct 21, 2022
gui automation based on pyautogui python as backend and flutter desktop as frontend, drag and drop tool, no coding required.

GUI_AUTOMATION gui automation based on pyautogui python as backend and flutter desktop as frontend, drag and drop tool, no coding required. Install py

Hassan Kanso 34 Oct 30, 2022
tool for art challenges check

ArtTime This is a tool for artists to have a simple and fast art challenges check. Links Demo Video Architecture plan Plan (What to expect from this p

null 15 Oct 11, 2021
Metask is an intuitive tool for project management and task management.

Metask is an intuitive tool for project management and task management. It is ideal for your personal organization, but also for efficient teams.

Nijat Namazzade 11 Nov 5, 2022
A Real-time Fps Tool for Android

fpsviewer A Real-time Fps Tool for Android, 一个能实时显示fps,一段时间的平均帧率,以及帧率范围占比,并能获取卡顿堆栈的可视化工具。侵入性低,通过在异步线程采样获取堆栈,无代码侵入,性能消耗可忽略,对性能监控项的异常数据进行采集和分析,整理输出展示相应的

null 318 Dec 27, 2022
A flexible tool for application localization using Google Sheets.

goloc A flexible tool for application localization using Google Sheets. Table of Contents Features Supported OS / architectures Supported platforms /

Alex Isaienko 52 Oct 17, 2022
"A portable tool for displaying, searching, studying well known books from the google books api"

google_books_api A new Flutter application. Getting Started An Easy to use portable Google books reader, Allow authenication flow of users across the

Godslove lee 4 Jul 11, 2022
A command-line tool which simplifies the task of updating your Flutter app's launcher name

flutter_launcher_name A command-line tool which simplifies the task of updating your Flutter app's launcher name. If you user this package, You don't

null 44 Nov 13, 2022
The Device Fingerprint tool collects thorough insight about the devices associated to a user.

The Device Fingerprint tool collects thorough insight about the devices associated to a user. Account takeovers and multiple account signups, payments can easily be avoided by applying the Device Fingerprinting module.

Shahin Sefidgaran 6 Nov 28, 2022
A Simple Todo app design in Flutter to keep track of your task on daily basis. Its build on BLoC Pattern. You can add a project, labels, and due-date to your task also you can sort your task on the basis of project, label, and dates

WhatTodo Life can feel overwhelming. But it doesn’t have to. A Simple To-do app design in flutter to keep track of your task on daily basis. You can a

Burhanuddin Rashid 1k Jan 6, 2023