TranslateSelf

Gem Version Gem Downloads

Strings in Ruby are a bit hard to understand if you're not an English speaker. What does

"hello world"

even mean? I for one didn't study enough English to understand that! But worry no more!

asciicast

Just get a DeepL auth key and export it as follows:

export DEEPL_AUTH_KEY="your-api-token"

By default this gem uses the free DeepL servers, but you can also configure your own:

export DEEPL_HOST="non-free-host"

Now you can translate it to your language of chose with this gem!

"hello world".translate_to_ja
# 世界よ、ハローだ

What's even better is that you can also save some typing by using the shortened alias such as below:

"hello world".to_ja # or to_fi, to_ru... endless possibilities!
# 世界よ、ハローだ

This gem uses the wonderful DeepL for Ruby as its backend.

https://github.com/wikiti/deepl-rb

Installation

Add this line to your application's Gemfile:

gem 'translate_self'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install translate_self

Supported languages:

Supported languages are: Bulgarian, Chinese, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Latvian, Lithuanian, Polish, Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, and Swedish.

Usage

You can assign a string a language:

finn = "Oon suomalainen"
finn.language = 'fi'

This language will be passed on to DeepL when translating.

You can also assign a to-language parameter:

finn = "Oon suomalainen"
finn.to_language = 'en'

This way you can just use translate to get the string translated to English.

finn.translate
# I am a Finn

Using with # frozen_string_literal: true

~~Does not work if you freeze the strings.~~

Now it does! Just use the classes TranslatableString (aliased to TString). So even if you have a magic comment making all your strings frozen, you can still use the translate method like below:

hello = TranslatableString.new('hello', language: 'en', to_language: 'fi')
hello.translate
# "Moi"

OR! Use it with defrost! By default, defrost is not loaded. You can turn this on by setting TranslateSelf.defrosting = true, and after that, no need to worry about frozen strings! This will defrost strings if they're frozen. Might be a bit slower, but it's worth it! Interesting debug sessions guaranteed.

Benchmark

Create a string 5000000 times.

C:\home\sampo\translate_self> ruby benchmark.rb 
Rehearsal --------------------------------------------------------
normal string          0.221517   0.000101   0.221618 (  0.221677)
monkeypatched string   0.267748   0.000000   0.267748 (  0.267865)
translatable string    1.878466   0.000000   1.878466 (  1.878497)
----------------------------------------------- total: 2.367832sec

                           user     system      total        real
normal string          0.225292   0.000000   0.225292 (  0.225289)
monkeypatched string   0.225690   0.000000   0.225690 (  0.225740)
translatable string    1.886653   0.000000   1.886653 (  1.886735)

So... the overhead might be surprisingly low! If you use the TranslatableString class, there is some overhead. But if you just hack string it's pretty fast! See benchmark.rb.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sampokuokkanen/translate_self. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the TranslateSelf project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.