6

文字列をさまざまな言語に翻訳するために、組み込みの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 年のこのディスカッションも参照してください。

4

1 に答える 1

2

標準の UNIX i18n ソリューションであるgettextを使用します。Rails の場合は、gettext_i18n_railsを使用できます。1 つの注意点は、gettext_i18n_rails がサポートされている FastGettext が gettext を完全にサポートしていないようで、複数形化などの高度な機能が期待どおりに機能しないことです。

于 2012-09-28T00:05:13.480 に答える