文字列をさまざまな言語に翻訳するために、組み込みのRails i18nサポートを喜んで使用しています。最近ですが、この gem のデフォルトの動作を少し超えるものが必要になりました。
適切な言葉がないので、これを「逆翻訳」と呼びます。基本的には、ある言語の文字列があり、別のロケールでメソッドを呼び出して、ロケール文字列にマッピングが存在する場合にそのロケールに翻訳された文字列を取得できるようにしたいという考えです。
たとえば、私が持っていると仮定しますconfig/locales/en.yml
en:
hello: Hello World!
とでconfig/locales/ja.yml
:
ja:
hello: Konnichi wa!
l2l_translate
次に、英語のロケールで、文字列とロケールを引数としてこのメソッド (「ロケールからロケールへの翻訳」) を呼び出すと、日本語の翻訳が返されます。
I18n.locale = :en
l2l_translate("Hello World!", :ja) #=> "Konnichi wa!"
また、これはもっとトリッキーですが、補間された文字列を逆一致できるようにしたいと考えています。だから私が持っていると言います:
構成/ロケール/en.yml
en:
minutes: "%d minutes"
config/locales/ja.yml
ja:
minutes: "%d分"
次に、次のように英語から日本語に翻訳できるはずです。
l2l_translate("5 minutes", :ja) #=> "5分"
したがって、基本的に文字列は正規表現で英訳文字列に一致させ、「5」を抜き出して引数「%d」として日本語訳に送信する必要があります。
1) 一致がない場合、または 2) 複数の一致がある場合は、明らかに潜在的な問題があります。これらは、たとえば例外を発生させるか、前者の場合は nil を返し、後者の場合は翻訳の配列を返すことで処理できます。いずれにせよ、それらはマイナーなポイントです。
私の基本的な質問は次のとおりです。このようなものは存在しますか? そうでない場合、それを開発する方法について誰か提案がありますか(gemとして)?
具体的に考えているアプリケーションは、日本語のサービスの API ラッパーです。マッチングして他の言語に翻訳できる日本語のパターンを指定できるようにしたいと考えています。デフォルトの i18n サポートはこれを行いません。また、他の gem がそうするかどうかも知りません。
アドバイスや提案をいただければ幸いです。参考までに、i18n-rails を使用した逆変換のトピックに関する 2010 年のこのディスカッションも参照してください。