glebm/i18n-tasks

View on GitHub
CHANGES.md

Summary

Maintainability
Test Coverage
## Unreleased

* Uses AST-parser for all ERB-files, not just `.html.erb`
* [Fixed regex in `PatternScanner`] (https://github.com/glebm/i18n-tasks/issues/572)

## v1.0.14

* Newlines are now preserved when using Google Translate.
  [#567](https://github.com/glebm/i18n-tasks/pull/567)
* Improved locale name handling for Google Translate.
  [#558](https://github.com/glebm/i18n-tasks/pull/558)
* Fixes compatibility with some versions of the i18n gem.
  [#553](https://github.com/glebm/i18n-tasks/pull/553)
* Added `i18n-tasks cp` command.
  [#551](https://github.com/glebm/i18n-tasks/pull/551)
* Parentheses in keys are now supported.
  [#550](https://github.com/glebm/i18n-tasks/pull/550)
* Non-HTML ERB files are now supported.
  [#545](https://github.com/glebm/i18n-tasks/pull/545)
* Adds an optional isolating router that assumes each YAML file is independent.
  [#541](https://github.com/glebm/i18n-tasks/pull/541)
* Adds an optional AST matcher for Rails default_i18n_subject.
  [#538](https://github.com/glebm/i18n-tasks/pull/538) [#539](https://github.com/glebm/i18n-tasks/pull/539)
* Supports DeepL glossaries.
  [#535](https://github.com/glebm/i18n-tasks/pull/535)
* Supports hashes for DeepL and other translators.
  [#531](https://github.com/glebm/i18n-tasks/pull/531)
* Adds configuration for OpenAI prompt.
  [#533](https://github.com/glebm/i18n-tasks/pull/533)
* Adds configuration for OpenAI model.
  [#532](https://github.com/glebm/i18n-tasks/pull/532) [#534](https://github.com/glebm/i18n-tasks/pull/534)

## v1.0.13

* OpenAI translator.
  [#519](https://github.com/glebm/i18n-tasks/pull/519)
* DeepL
  * More robust interpolation handling.
    [#523](https://github.com/glebm/i18n-tasks/pull/523)
  * Configurable formality level.
    [#477](https://github.com/glebm/i18n-tasks/pull/477)
  * Send requests in batches.
    [#474](https://github.com/glebm/i18n-tasks/pull/474)
* Support partially dynamic segments in non-strict mode (e.g. `t "cats.#{cat}-bio.name"`).
  [#509](https://github.com/glebm/i18n-tasks/pull/509)
* Fixes `grep_keys` in Ruby 3+.
  [#492](https://github.com/glebm/i18n-tasks/pull/492)
* Improved handling of older libyaml versions.
  [#493](https://github.com/glebm/i18n-tasks/pull/493)

## v1.0.12

* The heuristic for detecting non-plural keys that look like plural keys has been removed
  because it was causing other issues. Please use `ignore_missing` to handle such keys.
  [#461](https://github.com/glebm/i18n-tasks/issues/461)
* Adds support for plural default values,
  e.g. `t('test', default: { one: '1', other: '2' })`.
  [#464](https://github.com/glebm/i18n-tasks/issues/464)
* Adds the `-p` pattern option to the `missing`, `add-missing`, and `translate-missing` commands.
  [#469](https://github.com/glebm/i18n-tasks/issues/469)
* Relaxes version restriction for the `better_html` depedency to allow v2.x.
  [#471](https://github.com/glebm/i18n-tasks/pull/471)
* Support filenames where locale is separated by a `-`, e.g. `user-en.yml` instead of the usual `user.en.yml`.
  [#467](https://github.com/glebm/i18n-tasks/pull/467)

## v1.0.11

* Fixes `--config` command line flag.
  [#455](https://github.com/glebm/i18n-tasks/pull/455)

* Fixes circular `require` warnings on Ruby 3.1.2.
  [#457](https://github.com/glebm/i18n-tasks/pull/457)

* `*.xlsx` files are now excluded by default.
  [#458](https://github.com/glebm/i18n-tasks/pull/458)

## v1.0.10

* Fixes `relative_exclude_method_name_paths`.
  Previously, the code used `exclude_method_name_paths` instead of `relative_exclude_method_name_paths`.
  [#454](https://github.com/glebm/i18n-tasks/pull/454)

## v1.0.9

* Adds an optional AST matcher for Rails model translations, such as `human_attribute_name`.

  Can be enabled by adding the following to the config:

  ```erb
  <% I18n::Tasks.add_ast_matcher('I18n::Tasks::Scanners::AstMatchers::RailsModelMatcher') %>
  ```

  [#433](https://github.com/glebm/i18n-tasks/pull/433)

## v1.0.8

* Fixes a crash in `strict: false` mode.
  [#445](https://github.com/glebm/i18n-tasks/pull/445)

## v1.0.7

* Fixes an issue with `scope:` argument parsing.
  [#442](https://github.com/glebm/i18n-tasks/pull/442)

## v1.0.6

* Fixes handling of more types of ERB comments.
  [#437](https://github.com/glebm/i18n-tasks/pull/437)

## v1.0.5

* Fixes handling of multiline ERB comments.
  [#431](https://github.com/glebm/i18n-tasks/issues/431)

## v1.0.4

* Fixes handling of ERB comments without a space between `%` and `#` (`<%# ... %>`).
  [#429](https://github.com/glebm/i18n-tasks/pull/429)
* Better support for the `it` gem.
  [#361](https://github.com/glebm/i18n-tasks/issues/361)

## v1.0.3

* Fixes inline block handling in ERB files.
  [#427](https://github.com/glebm/i18n-tasks/pull/427)

## v1.0.2

* Fixes block call handling in ERB files.
  [#425](https://github.com/glebm/i18n-tasks/pull/425)

## v1.0.1

* Fixes `better_html` scanning the project.
  [#422](https://github.com/glebm/i18n-tasks/issues/422)

## v1.0.0

* Log [#StandWithUkraine](https://stand-with-ukraine.pp.ua/) to stderr on every CLI command.
* Improved ERB parsing: Replaces a regexp-based parser with an AST parser.
  [#416](https://github.com/glebm/i18n-tasks/pull/416)
* Fixes compatibility with Psych 4.0+ and Ruby 3.1.
  [#415](https://github.com/glebm/i18n-tasks/pull/415)
* Works around an emoji handling bug in libyaml.
  [#421](https://github.com/glebm/i18n-tasks/pull/421)

## v0.9.37

* Reverted `"#{hash["key"]}"` pattern scanner support because it caused a number of issues.
  [#410](https://github.com/glebm/i18n-tasks/pull/410)
* Drops support for Ruby < 2.6.
  [#2552cdb3](https://github.com/glebm/i18n-tasks/commit/2552cdb36a94a801e64d6b71279353dbbedb1618)

## v0.9.36

* Fixes ActiveSupport 7 compatibility.
  [#403](https://github.com/glebm/i18n-tasks/pull/403)
* Fixes mixed optional and keyword arguments in `I18n::Tasks::BaseTask.new`.
  [#401](https://github.com/glebm/i18n-tasks/issues/401)
* `*.map` files are now ignored by default.
  [#399](https://github.com/glebm/i18n-tasks/pull/399)
* `data` task now supports the `key-values` format that outputs a TSV.
  [#398](https://github.com/glebm/i18n-tasks/pull/398)
* `"#{hash["key"]}"` interpolations are now supported in the pattern scanner.
  [#397](https://github.com/glebm/i18n-tasks/pull/397) [#405](https://github.com/glebm/i18n-tasks/pull/405)
* Forward slash (`/`) is now an allowed character in translation keys.
  [#396](https://github.com/glebm/i18n-tasks/pull/396)

## v0.9.35

* New CLI argument `--config`, to specify the config file location.
  [#394](https://github.com/glebm/i18n-tasks/issues/394)
* Allow relative keys in any Ruby object.
  [#381](https://github.com/glebm/i18n-tasks/issues/381)
* Fix not ignoring missing for pluralization.
  [#389](https://github.com/glebm/i18n-tasks/issues/389)
* A more robust translation interpolation replacement token.
  [#392](https://github.com/glebm/i18n-tasks/pull/392)
* Add `deepl_host` and `deepl_version` to translation config.
  [#384](https://github.com/glebm/i18n-tasks/pull/384)
* Add `*.jpeg` to the default ignore list.
  [#382](https://github.com/glebm/i18n-tasks/pull/382)

## v0.9.34

* Fixes Ruby 3.0 compatibility.
  [#370](https://github.com/glebm/i18n-tasks/issues/370)
* Drops support for Ruby < 2.5.
  [#e71a3bf](https://github.com/glebm/i18n-tasks/commit/e71a3bf37e46606aaaea1df81108f8e43aa4a5a1)

## v0.9.33

* Fixes DeepL translation.
  [#367](https://github.com/glebm/i18n-tasks/pull/367)

## v0.9.32

* Support capitalized region names in locale codes (e.g. "zh-YUE")
  [#357](https://github.com/glebm/i18n-tasks/pull/357)
* DeepL: Fix single value translation.
  [#d31297b5](https://github.com/glebm/i18n-tasks/commit/d31297b557687b022e4534927237e4dfd1fdfd23)
* Fix missing key detection for external keys in non-base locale.
  [#364](https://github.com/glebm/i18n-tasks/issues/364)
* `required_ruby_version`: Allow Ruby 3.x.
* Fix deprecation warnings on Ruby 2.7.1.
  [#352](https://github.com/glebm/i18n-tasks/pull/352)

## v0.9.31

* Add Yandex translator backend.
  [#343](https://github.com/glebm/i18n-tasks/pull/343)
* Fix more Ruby 2.7 warnings.
  [#344](https://github.com/glebm/i18n-tasks/pull/344)

## v0.9.30

* Fix keyword arguments warnings in Ruby 2.7.
  [#342](https://github.com/glebm/i18n-tasks/pull/342)
* Recognize `t!` and `translate!` methods.
  [#329](https://github.com/glebm/i18n-tasks/issues/329)
* Test template now tests for inconsistent interpolations.
  [#317](https://github.com/glebm/i18n-tasks/pull/317)

## v0.9.29

* The `remove_unused` command now supports `--pattern`.
  [#327](https://github.com/glebm/i18n-tasks/pull/327)
* Common audio and video file extensions are now ignored.
  [#324](https://github.com/glebm/i18n-tasks/issues/324)
* The test templates for RSpec and minitest now include consistent interpolations check.
  [#317](https://github.com/glebm/i18n-tasks/pull/317)
* Leaf->tree expansion warnings are no longer issued for plural keys (where they are legal).
  [#314](https://github.com/glebm/i18n-tasks/pull/314)
* Single line comments are now ignored in `.js` and `.es6` files.
  Magic comments are still supported (e.g. `// i18n-tasks-use I18n.t('hello')`).
  [#322](https://github.com/glebm/i18n-tasks/issues/322)
* No longer loads all of `rails-i18n` and doesn't set `I18n.enforce_available_locales`,
  fixing some compatibility issues introduced in v0.9.28.
  [#315](https://github.com/glebm/i18n-tasks/issues/315)

## v0.9.28

* The `missing` command now also detects incomplete pluralizations.
  [#308](https://github.com/glebm/i18n-tasks/issues/308)

## v0.9.27

* Fixes `check-consistent-interpolations` when the same interpolation is used more than once.

## v0.9.26

* `eq-base` command now returns a non-zero exit code if there are any results.
  [#301](https://github.com/glebm/i18n-tasks/pull/301)
* New command, `check-consistent-interpolations`, checks that %-interpolations across all locales are consistent.
  The corresponding ignore setting is `ignore_inconsistent_interpolations`.

  This check also runs as part of the `health` command.

  [#304](https://github.com/glebm/i18n-tasks/pull/304)

## v0.9.25

* Adds an optional `--keep-order` (`-k`) parameter to `remove-unused`.
  When passed, keys in the files are not sorted after removing the unused keys.
  [#297](https://github.com/glebm/i18n-tasks/pull/297)
* Drops support for Ruby < 2.3.
  [#298](https://github.com/glebm/i18n-tasks/pull/298)
* Fixes a rare concurrency issue, most easily reproduced on Rubinius.
  [#300](https://github.com/glebm/i18n-tasks/issues/300)
* Avoid Google / DeepL translating empty keys (a minor optimization).
  [#fc529e78](https://github.com/glebm/i18n-tasks/commit/fc529e78d2421ad08e7a93c0164e5d0be1492e40)

## v0.9.24

* Makes `deepl-rb` and `easy_translate` dependencies optional.
  [#296](https://github.com/glebm/i18n-tasks/issues/296)
* Adds DeepL support to `tree-translate`.
* Removes the deprecated `tree-rename-key` command.
* Removes obsolete XSLX report functionality.

## v0.9.23

Fixes DeepL locale handling.
[#49d6d2b6](https://github.com/glebm/i18n-tasks/commit/49d6d2b6afc548b9753b6356a8b51d136b79ba10)

## v0.9.22

Adds the [DeepL](https://www.deepl.com/pro) Machine Translation service.
[#294](https://github.com/glebm/i18n-tasks/pull/294)

You can use it by passing `--backend=deepl` to `translate-missing`:

```bash
i18n-tasks translate-missing --backend deepl
```

Like Google Translate, DeepL also requires an API key. It can be set either via the `DEEPL_AUTH_KEY` environment
variable, or by setting `translation.deepl_api_key` in `i18n-tasks.yml`.

## v0.9.21

Relaxes the `rainbow` dependency version restriction.

## v0.9.20

`i18n-tasks tree-mv` now defaults to matching key patterns including the locale, consistent with other `tree-` commands.
Fixes [#274](https://github.com/glebm/i18n-tasks/issues/274).

Fixes `missing` ignoring the `-t` argument.
[#271](https://github.com/glebm/i18n-tasks/pull/271)

## v0.9.19

Adds a new configuration setting, `data.external`, for locale data from external dependencies (e.g. gems).
This locale data is never considered unused, and is never modified by i18n-tasks.
[#264](https://github.com/glebm/i18n-tasks/issues/264)

Fixes support for calls such as `t @instance_variable, scope: :static_scope` in the non-AST scanner.
[#1d2c6d0c](https://github.com/glebm/i18n-tasks/commit/1d2c6d0cb7ee20a8db68c52e33ec3c2a382633e6)

Fixes `remove-unused` not removing entire files.
[#260](https://github.com/glebm/i18n-tasks/issues/260)

Fixes `normalize` not removing emptied files.
[#263](https://github.com/glebm/i18n-tasks/issues/263)

## v0.9.18

Fixes support for calls such as `t dynamic_key, scope: :static_scope` in the non-AST scanner.
[#255](https://github.com/glebm/i18n-tasks/pull/255)

## v0.9.17

Adds a new task, `check-normalized`, and the corresponding specs, to verify that all the locale files are normalized.
[#249](https://github.com/glebm/i18n-tasks/issues/249)

Fixes an issue with normalization not happening in certain cases.
[#91b593d7](https://github.com/glebm/i18n-tasks/commit/91b593d7259460e2a3aa7fd731d878e8e35707fc)

There is now a minitest template file available.
[#250](https://github.com/glebm/i18n-tasks/pull/250)

Internally, Erubi is now used instead of Erubis for parsing the config file.
[#247](https://github.com/glebm/i18n-tasks/issues/247)

## v0.9.16

Improves handling of interpolations in `translate-missing` when multiple interpolations are present.

## v0.9.15

Adds new configuration options to the built-in scanners to enable support for non-standard messages and receivers.

For example, to support the [`it` gem](https://github.com/iGEL/it):

```ruby
# lib/i18n_tasks_it.rb
# The "it" gem support for i18n-tasks
I18n::Tasks.add_scanner(
  '::I18n::Tasks::Scanners::RubyAstScanner',
  receiver_messages: [nil, AST::Node.new(:const, [nil, :It])].product(%i[it]),
  only: %w[*.rb]
)
I18n::Tasks.add_scanner(
  '::I18n::Tasks::Scanners::PatternWithScopeScanner',
  translate_call: /(?<=^|[^\w'\-.]|[^\w'\-]It\.|It\.)it/,
  exclude: %w[*.rb]
)
```

```yaml
# config/i18n-tasks.yml.erb
<% require './lib/i18n_tasks_it' %>
```

## v0.9.14

* AST scanner: support nested `t` calls in ruby files.
  [#c61f4e00](https://github.com/glebm/i18n-tasks/commit/c61f4e00ee67d7e9963ddb44ed3228f551cc1cad)

* Exclude `*.swf` and `*.flv` files by default.
  [#233](https://github.com/glebm/i18n-tasks/issues/233)

## v0.9.13

This release removes a GPL-licensed dependency, `Term::ANSIColor`, with the MIT-licensed Rainbow gem.

Thanks, @ypresto, for [discovering](https://github.com/glebm/i18n-tasks/issues/234)
and [fixing](https://github.com/glebm/i18n-tasks/pull/235) the issue!

## v0.9.12

This is a minor bugfix release.

* Do not warn about "adding children to leaf" for keys found in source.
  [#228](https://github.com/glebm/i18n-tasks/pull/228)
* Fix an issue with nested keys with the `scope` argument in views.
  [#224](https://github.com/glebm/i18n-tasks/issues/224)

## v0.9.11

This is a minor bugfix release.

* Fixes another issue with the `scope` argument in views.
  [#224](https://github.com/glebm/i18n-tasks/issues/224)

## v0.9.10

This is a minor bugfix release.

* Fixes parenthesized `t()` calls with a `scope` argument in views.
  [#224](https://github.com/glebm/i18n-tasks/issues/224)
* Fixes the `i18n-tasks irb` task.
  [#222](https://github.com/glebm/i18n-tasks/issues/222)

## v0.9.9

This release fixes an issue with dynamic scope arguments in views.

This affects calls like the following:

```erb
<%= t('key', scope: dynamic) %>
```

Previously, i18n-tasks would incorrectly parse it as `key`. Now, such calls are ignored.

[#213](https://github.com/glebm/i18n-tasks/issues/213)

## 0.9.8

This release adds the `mv` command for renaming/moving the keys.
[#116](https://github.com/glebm/i18n-tasks/issues/116)

## 0.9.7

This is a minor bugfix release.

* Fixed `add-missing` command ignoring the locales argument.
  [#205](https://github.com/glebm/i18n-tasks/issues/205)
* Always require `PatternMapper` so that it doesn't need requiring in the config.
  [#204](https://github.com/glebm/i18n-tasks/issues/204)
* If `internal_locale` is set to a locale that's not available, reset it to `en` and print a warning.
  [#202](https://github.com/glebm/i18n-tasks/issues/202)

## 0.9.6

This is a minor bugfix release.

* Fixes the `ignore_lines` PatternScanner feature. [#206](https://github.com/glebm/i18n-tasks/issues/206)
* Allows `:` to be a part of the key. [#207](https://github.com/glebm/i18n-tasks/issues/207)
* Fixes translation of plural HTML keys. [#193](https://github.com/glebm/i18n-tasks/issues/193)

## 0.9.5

* Add a `PatternMapper` scanner for mapping bits of code to keys [#191](https://github.com/glebm/i18n-tasks/issues/191).
* Add missing keys with `nil` value by passing `--nil-value` to `add-missing`. [#170](https://github.com/glebm/i18n-tasks/issues/170)
* Requiring `i18n-tasks` no longer overrides `I18n.locale`. [#190](https://github.com/glebm/i18n-tasks/issues/190).

## 0.9.4

* Improve reporting for reference keys throughout.

## 0.9.3

* Support i18n `:symbol` reference keys. [#150](https://github.com/glebm/i18n-tasks/issues/150)
* Fixes dynamic key matching issue with nested `#{}`. [#180](https://github.com/glebm/i18n-tasks/issues/180)

## 0.9.2

* Fix ActiveSupport >= 4.0 but < 4.2 compatibility. [#178](https://github.com/glebm/i18n-tasks/issues/178)
* Locale file path rewriting now matches locales as directories and multiple instances of the locale in the path. [#176](https://github.com/glebm/i18n-tasks/issues/176) [#177](https://github.com/glebm/i18n-tasks/issues/177)

## 0.9.1

* New method: `I18n::Tasks.add_scanner(scanner_class_name, scanner_opts)` to add a scanner to the default configuration.
* New method: `I18n::Tasks.add_commands(commands_module)` to add commands to `i18n-tasks`.
* Only match `I18n` or `nil` receivers in PatternScanner.

## 0.9.0

* Support for multiple scanners.
* AST scanner for `.rb` files.
* `default:` argument support for `add-missing -v`. AST scanner only.  [#55](https://github.com/glebm/i18n-tasks/issues/55)
* Recognize that only `t` calls can use relative keys, not `I18n.t`. AST scanner only. [#106](https://github.com/glebm/i18n-tasks/issues/106)
* Strict mode enabled by default, can be configured via `search.strict`. New argument: `--no-strict`.
* `search.include` renamed to `search.only`.

## 0.8.7

* New interpolation value for `add-missing -v`: `%{key}`. [Stijn Mathysen](https://github.com/stijnster) [#164](https://github.com/glebm/i18n-tasks/pull/164)
* When adding keys from non-default locales, merge base locale first, then the others. [#162](https://github.com/glebm/i18n-tasks/issues/162)

## 0.8.6

* Report missing keys found in source in all the locales. [#162](https://github.com/glebm/i18n-tasks/issues/162)
* Fix `data-remove` task. [#140](https://github.com/glebm/i18n-tasks/issues/140)
* Non-zero exit code on `health`, `missing`, and `unused` if such keys are present. [#151](https://github.com/glebm/i18n-tasks/issues/151)
* XLSX report compatibility with the OSX Numbers App. [#159](https://github.com/glebm/i18n-tasks/issues/159)
* RSpec template compatibility with `config.expose_dsl_globally = false`. [#148](https://github.com/glebm/i18n-tasks/issues/148)
* `bundle show vagrant` example in the config template is no longer interpolated .[#161](https://github.com/glebm/i18n-tasks/issues/161)

## 0.8.5

* Fix regression: Plugin support [#153](https://github.com/glebm/i18n-tasks/issues/153).

## 0.8.4

* Support relative keys in mailers [#155](https://github.com/glebm/i18n-tasks/issues/155).

## 0.8.3

* Fix regression: ActiveSupport < 4 support [#143](https://github.com/glebm/i18n-tasks/issues/143).

## 0.8.2

* Fix failure on nil values in the data config [#142](https://github.com/glebm/i18n-tasks/issues/142).

## 0.8.1

* The default config file now excludes `app/assets/images` and `app/assets/fonts`. Add `*.otf` to ignored extensions.
* If an error message occurs when scanning, the error message now includes the filename [#141](https://github.com/glebm/i18n-tasks/issues/141).

## 0.8.0

* Parse command line arguments with `optparse`. Remove dependency on Slop.
  Simplified commands DSL: options are mostly passed directly to optparse.
* `search.relative_roots` default changed from from `%w(app/views)` to
  `%w(app/views app/controllers app/helpers app/presenters)`.
* `add-missing` now adds keys detected in source to all locales (previously just base) [#134](https://github.com/glebm/i18n-tasks/issues/134).
* The default spec template no long requires `spec_helper` by default [Daniel Levenson](https://github.com/dleve123) [#135](https://github.com/glebm/i18n-tasks/pull/135).
* `search.exclude` now appends to and not overrides the default exclude list. More extensions excluded by default:
  *.css, *.sass, *.scss, *.less, *.yml, and *.json. [#137](https://github.com/glebm/i18n-tasks/issues/137).

## 0.7.13

* Fix relative keys when controller name consists of more than one word by [Yuji Nakayama](https://github.com/yujinakayama) [#132](https://github.com/glebm/i18n-tasks/pull/132).
* Support keys with UTF8 word characters in the name. [#133](https://github.com/glebm/i18n-tasks/issues/133).
* Change missing report column title from "Details" to "Value in other locales or source", display the locale [#130](https://github.com/glebm/i18n-tasks/issues/130).

## 0.7.12

* Handle relative keys in controllers nested in modules by [Alexander Tipugin](https://github.com/atipugin). [#128](https://github.com/glebm/i18n-tasks/issues/128).
* Only write files that changed [#125](https://github.com/glebm/i18n-tasks/issues/125).
* Allow `[]` in the non-strict scanner pattern [#127](https://github.com/glebm/i18n-tasks/issues/127).

## 0.7.11

* Set slop dependency to 3.5 to ensure Ruby 1.9 compatibility ([#121](https://github.com/glebm/i18n-tasks/pull/121)).
  MRI 1.9 EOL is [February 23, 2015](https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will-end-on-2015/).
  We will support 1.9 until rbx and jruby support 2.0.

## 0.7.10

* Support relative keys in controller action with argument

## 0.7.9

* Support relative keys in Rails controller actions by [Jessie A. Young](https://github.com/jessieay). [#46](https://github.com/glebm/i18n-tasks/issues/46).
* Minor fixes

## 0.7.8

* Fix Google Translate issues with non-string keys [#100](https://github.com/glebm/i18n-tasks/pull/100)
* Fix an issue with certain HAML not being parsed [#96](https://github.com/glebm/i18n-tasks/issues/96) [#102](https://github.com/glebm/i18n-tasks/pull/102)
* Fix other minor issues

## 0.7.7

* Fix regression: keys are sorted once again [#92](https://github.com/glebm/i18n-tasks/issues/92).

## 0.7.6

* Add a post-install notice with setup commands
* Fix a small typo in the config template [#91](https://github.com/glebm/i18n-tasks/pull/91).
* Fix `find` crashing on relative keys (regression)

## 0.7.5

Dynamic key usage inference fixes by [Mikko Koski](https://github.com/rap1ds):

* Append `:` to keys ending with dot '.' (to scan `t('category.' + cat)` as `t('category.:')`)
* Consider keys ending with `:` as match expressions
* Make `@` a valid character for keys (to allow `t("category.#{@cat}"`)

## 0.7.4

* Fix `add-missing --help`
* Fix a minor issue with `health` [#88](https://github.com/glebm/i18n-tasks/issues/88)

## 0.7.3

* New task `translate-tree`
* Bugs fixed: [nil values and Google Translate](https://github.com/glebm/i18n-tasks/issues/85), [config file encoding issue](#82).

## 0.7.2

* i18n-tasks now analyses itself! `internal_locale` setting has been added, that controls i18n-tasks reporting language.
English and Russian are available in this release.

## 0.7.1

* 1.9.3 compatibility

## 0.7.0

New tasks:

* `i18n-tasks health` to display missing and unused keys along with other information
* `i18n-tasks tree-` to manipulate trees
* `i18n-tasks data-` to look up and manipulate locale data
* Better `help` for all commands
* Minor bug fixes

Internally:

* Refactored commands DSL
* `add-missing`, `remove-unused` implemented in terms of the new `tree-` commands

## 0.6.3

* Strict mode added for `unused` and `remove-unused`. When passed `-s` or `--strict`, these tasks will not attempt to infer dynamic key usages, such as `t("category.#{category.key}")`.
* Arrays are now supported as values for Google Translate [#77](https://github.com/glebm/i18n-tasks/issues/77)

## 0.6.2

* New task to show locale data: `i18n-tasks data`
* New output format: `keys`, e.g. `i18n-tasks data -fkeys`
* Fix an issue with a top-level dynamic key breaking unused detection [#75](https://github.com/glebm/i18n-tasks/issues/75)
* Document [magic comment hints](https://github.com/glebm/i18n-tasks#fine-tuning)

## 0.6.1

* Fix Google Translate issue with plural keys and missing billing info error

## 0.6.0

* New output format options for reports: yaml, json, and inspect.
* Templates for config and rspec.
* Keys with values same as base locale have been moved from `missing` into a separate task, `eq-base`.
* `missing` now also shows keys that are present in some locale but not in base locale.
* Terminal output: no more Type column in `missing`, first code usage shown for keys missing base value.
* `relative_roots` configuration key moved to `search.relative_roots`, deprecation warning (removed in the next minor).

## 0.5.4

* ActiveSupport 3 compatibility

## 0.5.3

* Fix Google translate regression
* More robust config output

## 0.5.2

* Ignore lines during search with `config.search.ignore_lines`. Ignores comments by default.
* Fixed minor issues with `i18-tasks config` output.

## 0.5.1

* Fix [conservative router](https://github.com/glebm/i18n-tasks#conservative-router).
* Conservative router is now the default.

## 0.5.0

* internals refactored to use trees everywhere
* type `guide` in `i18n-tasks irb` to learn more about the commands
* (remove-)unused tasks now work per locale
* `ignore` settings are shown on `i18n-tasks config`
* Rubinius 2.2.7 compatibility

## 0.4.5

* Respect tty color setting

## 0.4.4

* Fix google translate issues with plural keys and translating from non-base locale

## 0.4.3

* Ruby 1.9 compatibility

## 0.4.2

* Ruby 1.9.3-compatible again

## 0.4.1

* Improved error messages across the board
* Fixed google translate issue with _html keys [#67](https://github.com/glebm/i18n-tasks/issues/67).

## 0.4.0

* In addition to pattern router, a new conservative router that keeps the keys in place. (See [#57](https://github.com/glebm/i18n-tasks/issues/57))
* `i18n-tasks irb` for debugging
* This release is a major refactoring to use real trees internally (as opposed to nested hashes).
Real trees allow for much easier [traversal](/lib/i18n/tasks/data/tree/traversal.rb).
With these trees, information can be associated with each node, which allows for things like the conservative router.
* Accept keys with dashes (`-`) [#64](https://github.com/glebm/i18n-tasks/issues/64).

## 0.3.11

* Improve plural key handling

## 0.3.10

* New (de)serialization options in config
* `add-missing` placeholder argument can now use %{base_value}.

## 0.3.9

* Fix regression: Remove ActiveSupport::HashWithIndifferentAccess from locale data output

## 0.3.8

* Fix activesupport ~3.x compatibility issue (#45).

## 0.3.7

* Catch Errno::EPIPE to allow `i18n-tasks <command> | head` for large reports
* Improved i18n-tasks config output

## v0.3.6

* fix issue with Google Translate

## v0.3.5

* `config.locales` is now picked up by default from paths do data files. `base_locale` defaults to `en`.

## v0.3.3..v0.3.4

* Bugfixes

## v0.3.2

* Tasks that accept locales now accept them as the first argument(s)

## v0.3.0

* i18n-tasks is a binary now (instead of rake tasks). All tasks / commands now accept various options, and there is no need for as many of them as before.
* Works faster on Rails as it doesn't load anything but the gem, but now requires `base_locale` and `locales` to be set in config.

## v0.2.21..v0.2.22

* `rake i18n:usages[pattern]`
* performance regression fixes

## v0.2.20

* `rake i18n:usages` report

## v0.2.17..v0.2.19

* Bugfixes

## v0.2.16

* Key search extracted into its own class, and a custom scanner can now be provided.
* Removed support for deprecated settings

## v0.2.15

* More robust I18n.t call detection (detect I18n.translate and multiline calls)

## v0.2.14

* Google Translate fixes: preserve interpolations, set correct format based on the key (text or html).

## v0.2.13

* New setting relative_roots for relative key resolution (default: %w(app/views))
* fix google translation attempts to translate non-string keys

## v0.2.11 .. v0.2.12

* New task: `i18n:remove_unused`

## v0.2.5..0.2.10

* config/i18n-tasks.yml now processed with ERB
* can now be used with any ruby apps, not just Rails
* more locale formats are considered valid
* `i18n:missing` accepts locales
* `i18n:missing` supports plural keys

## v0.2.4

* more powerful key pattern matching with sets and backtracking

## v0.2.3

* spreadsheet report, tests run on rbx

## v0.2.2

* improved output with terminal-table

## v0.2.1

* fill tasks renamed, fix symbol key search

## v0.2.0

* 3 more prefill tasks, including Google Translate
* tasks renamed

## v0.1.8

* improved search: no longer uses grep, more robust detection (@natano)

## v0.1.7

* ability to route prefill output via data.write config
* multiple configuration variables renamed (still understands old syntax with deprecation warnings)

## v0.1.6

* New key pattern syntax for i18n-tasks.yml a la globbing

## v0.1.5

* Removed get_locale_data, added data configuration options

## v0.1.4

* Fix relative keys in partials (@paulfioravanti)
* Fix i18n:missing when nothing is missing (@tamtamchik)

## v0.1.3

* detect countable keys as used for unused task
* account for non-string keys coming from yaml (thanks @lichtamberg)

## v0.1.2

* added grep config options (thanks @dmke)
* improved terminal output