i18n-tasks icon indicating copy to clipboard operation
i18n-tasks copied to clipboard

can't translate using Google

Open thromera opened this issue 9 years ago • 15 comments

There is a problem when I try to translate my missing keys. Please find below my command line :).

✗ i18n-tasks translate-missing --from base fr
warning: parser/current is loading parser/ruby22, which recognizes
warning: 2.2.4-compliant syntax, but you are running 2.2.3.
warning: please see https://github.com/whitequark/parser#compatibility-with-ruby-mri.
/Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:94:in `next': undefined method `each' for nil:NilClass (NoMethodError)
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:94:in `parse_value'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:92:in `block in parse_value'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:92:in `map'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:92:in `parse_value'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:67:in `from_values'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:40:in `fetch_google_translations'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:30:in `block in google_translate_list'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:29:in `each'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:29:in `map'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:29:in `google_translate_list'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:13:in `block in google_translate_forest'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/data/tree/nodes.rb:16:in `each'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/data/tree/nodes.rb:16:in `each'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:12:in `inject'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/google_translation.rb:12:in `google_translate_forest'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/command/commands/missing.rb:39:in `translate_missing'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/command/commander.rb:26:in `run'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/cli.rb:42:in `run'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/cli.rb:19:in `block in start'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/cli.rb:203:in `auto_output_coloring'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/cli.rb:17:in `start'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/lib/i18n/tasks/cli.rb:10:in `start'
    from /Users/thomasromera/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.9.4/bin/i18n-tasks:16:in `<top (required)>'
    from /Users/thomasromera/.rbenv/versions/2.2.3/bin/i18n-tasks:23:in `load'
    from /Users/thomasromera/.rbenv/versions/2.2.3/bin/i18n-tasks:23:in `<main>'

thromera avatar Feb 11 '16 16:02 thromera

@Erowlin what permissions do you have in the Google developer console (https://console.developers.google.com) for the Google Translate API? I think my account required a credit card on file before it would work.

bartimaeus avatar Feb 11 '16 21:02 bartimaeus

We added a card aswell, the same API key is working for Crowdin :). (I tried with a new one also, paid too)

thromera avatar Feb 12 '16 13:02 thromera

Looks like it's failing when translating a key with an array value. This should be working though. Could you post the key/value that's failing here?

glebm avatar Feb 21 '16 09:02 glebm

@glebm I've similar issue

i18n-tasks translate-missing
/Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:90:in `next': undefined method `each' for nil:NilClass (NoMethodError)
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:90:in `parse_value'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:88:in `block in parse_value'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:88:in `map'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:88:in `parse_value'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:63:in `from_values'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:36:in `fetch_google_translations'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:27:in `block in google_translate_list'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:26:in `each'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:26:in `map'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:26:in `google_translate_list'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:13:in `block in google_translate_forest'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/data/tree/nodes.rb:16:in `each'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/data/tree/nodes.rb:16:in `each'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:12:in `inject'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/google_translation.rb:12:in `google_translate_forest'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/command/commands/missing.rb:38:in `translate_missing'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/command/commander.rb:26:in `run'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/cli.rb:41:in `run'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/cli.rb:18:in `block in start'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/cli.rb:201:in `auto_output_coloring'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/cli.rb:16:in `start'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/lib/i18n/tasks/cli.rb:9:in `start'
    from /Users/boris/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/i18n-tasks-0.8.7/bin/i18n-tasks:13:in `<top (required)>'
    from /Users/boris/.rbenv/versions/2.2.3/bin/i18n-tasks:23:in `load'
    from /Users/boris/.rbenv/versions/2.2.3/bin/i18n-tasks:23:in `<main>'

borisrorsvort avatar Mar 17 '16 08:03 borisrorsvort

Could you post the key/value that's failing here? You can find it by attaching a debugger / printing where it's failing.

glebm avatar Mar 17 '16 13:03 glebm

I was getting this exact error as well. Initially it looks though there is an issue with nil enumerators here:

# p p "#{untranslated}: #{each_translated.inspect}"
# result from above: "You agree that you will not engage in any: #<Enumerator: nil:each>"
restore_interpolations(untranslated, each_translated.next)

But I traced it all the way back through the call stack and it turns out my API key was not being set properly but wasn't blank, it seems like you can recreate this by setting a bad API key on purpose as well.

anthonypenner avatar Jul 08 '16 16:07 anthonypenner

Hi I have a similar issue as well when running i18n-tasks translate-missing...are there any updates? image

Adsidera avatar Nov 10 '17 08:11 Adsidera

@Adsidera Set the API key

glebm avatar Nov 10 '17 12:11 glebm

Hi, I'm no longer using this project, so I can't help further on the issue. Should I close it? Thanks.

thromera avatar Nov 10 '17 17:11 thromera

@glebm the api key was already set, but as a reference I managed to solve the issue by installing easytranslate in the gemfile, I set the google API key without double quotes in the config file and I run the translate-missing command with a bundle exec. It worked like a charm for me. Thank you for this awesome gem!

Adsidera avatar Nov 10 '17 19:11 Adsidera

This error seems to be generated when EasyTranslate.translate(to_values(list), opts) returns nil, I think this happens for a variety of reasons. One thing I'm noticing is:

  • EasyTranslate.translate(to_values(list), opts) => returns nil for my list of 136
  • EasyTranslate.translate("tom", opts) => EasyTranslate::EasyTranslateException: Daily Limit Exceeded
  • EasyTranslate.translate(["tom", "tim"], opts) => EasyTranslate::EasyTranslateException: Daily Limit Exceeded

So it seems like when the list is too long, it just returns nil and swallows any errors. I can open a bug on EasyTranslate for this, but it sounds like I18n Tasks should be handling a use-case where EasyTranslate returns nil by moving this check into from_values.

This is a helpful gem, so let me know if I can help

tomprats avatar Dec 07 '17 18:12 tomprats

@tomprats I would prefer that this EasyTranslate does not return nil if there is an error.

See also: https://github.com/seejohnrun/easy_translate/issues/35

glebm avatar Dec 08 '17 02:12 glebm

I think I'm running into a similar problem. I hit the "100.000 characters per 100 seconds" limitation (which I cannot change), and this raises an exception in easy_translate, which bubbles and in fact discards all translations so far (resulting in a bit of wasted money).

I forked easy_translate to just fill in empty translations in that case (which I can manually remove and rerun the task after 100 seconds to continue), but I think this should be handled more gracefully. Not sure whether this has to be done in i18n-tasks or easy_translate. But easy_translate raises an exception which i18n-tasks could catch and abort the translate-missing task gracefully.

fschwahn avatar Sep 10 '18 16:09 fschwahn

It's important to run bundle exec to have the env variables picked up.

bundle exec i18n-tasks translate-missing --from=en fr

You can also prepend the env variable this way

GOOGLE_TRANSLATE_API_KEY=<redacted> i18n-tasks translate-missing --from=en fr

scarroll32 avatar Dec 07 '19 17:12 scarroll32

@glebm the api key was already set, but as a reference I managed to solve the issue by installing easytranslate in the gemfile, I set the google API key without double quotes in the config file and I run the translate-missing command with a bundle exec. It worked like a charm for me. Thank you for this awesome gem!

Thank you. I didn't know why it stopped working for me. I removed the quotes from around my google API key and got it working again.

rebuilt avatar Feb 05 '21 15:02 rebuilt