0

特定のページ セクションをデータベースに格納するカスタムメイドの CMS を使用する大きな Rails アプリがあります。このアプリには、別の DB テーブルの文字列を検索する translate(string) 関数もあります || 見つからない場合は Google 翻訳 API。

このセットアップは、1 つの小さな側面を除いてうまく機能します。別の言語に切り替える場合、静的コンテンツも翻訳する必要があるため、コンテンツを別の行に複製するだけです。

私がやりたいのは、テンプレート内で使用されるある種のタグを実装し、静的なテンプレート内から文字列を調整する単純な翻訳を行うのと同じヘルパーを持つことです。ユーザーに [translate[mary had a little lamb]] などのタグを入力してもらい、ページがレンダリングされると、ヘルパーが起動して DB または Google 翻訳 API から翻訳を取得します。ヘルパーはすでに非常にうまく機能しており、memcache、文字列を管理するための CRUD 管理ページなどがあります。

だから基本的に:

<div class="some-random-class">
<p>This is some random text that won't be translated</p>
<p>And the following piece of text will be translated using the helper: [translate[mary had a little lamb]]</p>
</div>

これを実現する(安全な)方法はありますか?ポインタをいただければ幸いです。すでに数百のページがあり、このアプリで実行されるサイトごとにそれらを 15 回複製するのは悪夢です。

後で編集: コンテンツはデータベースから取得されるため、Q タイトルでは動的と呼ばれます。ただし、エンドユーザーにとっては、あちこちにテキストが含まれる静的な HTML です。これにより混乱が生じた場合は申し訳ありません。

4

1 に答える 1

0

これを行う簡単な方法は次のとおりです。

ヘルパー モジュールの場合:

def pretranslate(str)
  md = str.match(/\[translate\[([^\]]*)\]\]/)
  str.gsub(md[0], translate(md[1]))
end

コントローラーで:

@text = %Q{
  And the following piece of text will be translated using the helper: [translate[mary had a little lamb]]
}

あなたの見解では:

<%= pretranslate(@text) %>

これは明らかにかなりハックです。translate本質的に安全ではありませんが、メソッドの入力をどうするかによっては、それほど危険ではないはずです。

于 2013-10-02T22:39:11.740 に答える